当前位置:网站首页>C语言中常用的数组排序方法:冒泡排序、选择排序、插入排序、数组的移动(含代码详解)以及相关联系题
C语言中常用的数组排序方法:冒泡排序、选择排序、插入排序、数组的移动(含代码详解)以及相关联系题
2022-08-09 13:23:00 【东区东区!】
目录
一、冒泡排序
从键盘输入的5个整数按从小到大的顺序排序后输出,使用双for循环嵌套使用
通俗的讲,冒泡排序就是从头开始拿每个数去与后面对比,比出两者中的大的数字,拿大的数字继续去比后面的,也就是说第一轮循环之后最大的数字在最末尾。之后依次重复对比操作得到第二大、第三大的数字
#include<stdio.h>
int main()
{
int a[5] = {5,19,6,10,7}; //随便输入一组数组
int i, j;
int tmp;
int len = sizeof(a) / sizeof(a[0]); //用sizeof求出数组的长度
for (j = 0; j < len - 1; j++) //用双for循环完成排序,外层For循环控制总循环的次数
{
for (i = 0; i < len - 1 - j; i++) //内层for循环控制每次比较,第一个数比较4次,依
{ //次减少
if (a[i] > a[i + 1]) //若这个数大于下一个数字,则进行交换
{
tmp = a[i];
a[i] = a[i + 1];
a[i + 1] = tmp;
}
}
}
for(i = 0; i < len; i++)
{
printf("%d ", a[i]);
}
return 0;
}二、选择排序
选择排序是,我们从数组中找到最小的数字放在这个数组的第一个,找到第二个小的数字放在这个数组的第二个,依次类推,从而完成由小到大的排序。
#include<stdio.h>
int main()
{
int a[5] = {5,19,6,10,7};
int i, j;
int tmp;
int min;
int len = sizeof(a) / sizeof(a[0]);
for (j = 0; j < len - 1; j++)
{
min = j; //假设一个最小值
for (i = j + 1; i < len; i++)//从它后一个数开始比较
{
if (a[i] < a[min]) //如果这个数比假设的数字小
{
min = i; //改变下标代替Min
}
}
if (min != j) //min = j时不需要交换数字
{
tmp = a[min];
a[min] = a[j];
a[j] = tmp;
}
}
for(i = 0; i < len; i++)
{
printf("%d ", a[i]);
}
return 0;
}
三、插入排序
插入排序即,除了第一个数字之外,把后面其他数字依次插入前面,这时候就会与前面的数字比较,若小于前面的数字,则放在前面的数字之前,以此类推。
#include<stdio.h>
int main()
{
int a[5] = {5,19,6,10,7};
int i, j;
int tmp;
int len = sizeof(a) / sizeof(a[0]);
for (j = 1; j < len; j++)
{
tmp = a[j];
for (i = j; i > 0 && tmp < a[i - 1]; i--)
{
a[i] = a[i - 1];
}
a[i] = tmp;
}
for(i = 0; i < len; i++)
{
printf("%d ", a[i]);
}
return 0;
}
四、数组的顺序移动
例题:实现输入一个数m,对数组完成如下变化并打印 (数组的移动)
int a[9] = {0,1,2,3,4,5,6,7,8,9}
m:3 //输入3,数组向右整体移动三位,尾部的数字接到数组头部
7 8 9 1 2 3 4 5 6
m= 4
6 7 8 9 1 2 3 4 5
#include<stdio.h>
int main()
{
int m;
int a[] = { 1,2,3,4,5,6,7,8,9 };
int len = sizeof(a) / sizeof(a[0]);
scanf("%d", &m);
for (int i = 0; i < m; i++)
{
int tmp = a[len - 1];
for (int j = len - 1; j > 0; j--)
{
a[j] = a[j - 1];
}
a[0] = tmp;
}
for (int i = 0; i < len; i++)
{
printf("%d ", a[i]);
}
return 0;
}边栏推荐
猜你喜欢
随机推荐
神经网络与深度学习(TensorFlow)
tkiner-canvas显示图片
Operating system migration practice deploying MySQL database on openEuler
如何用vs新建Asp.net项目(Web页面)
记一次 ERROR scheduler.AsyncEventQueue: Dropping event from queue shared导致OOM
救火队员的行为准则
tianchi过往方法
几种常见路由类型及其优先级
RobotFramework 之 Evaluate
NC161 二叉树的中序遍历
NC53 删除链表的倒数第n个节点
pytest 之 fixture参数化
Q_04_06 把它放在一起:传送
CutefishOS系统默认自动桌面壁纸
GridContainer of openharmony container component
NC61 两数之和
VNet
pytest 之 fixture的调用
操作系统迁移实战之在openEuler上部署MySQL数据库
Flex for openharmony container components









