
目录
一、冒泡排序
二、选择排序
三、插入排序
四、数组的顺序移动
一、冒泡排序
从键盘输入的5个整数按从小到大的顺序排序后输出,使用双for循环嵌套使用
通俗的讲,冒泡排序就是从头开始拿每个数去与后面对比,比出两者中的大的数字,拿大的数字继续去比后面的,也就是说第一轮循环之后最大的数字在最末尾。之后依次重复对比 *** 作得到第二大、第三大的数字
#include
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
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
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
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;
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)