C语言-排序
冒泡排序两两比力,大的放后面。
每比力一轮,纪录交换的次数。当交换的次数为零时,则表示排序完成。
char a={9,5,1,2,4,7,6,8,3,0};
9大于5 交换5 91 2 4 7 6 8 3 0
9大于1 交换 51 92 4 7 6 8 3 0
9大于2 交换 5 12 94 7 6 8 3 0
9大于4 交换 5 1 24 97 6 8 3 0
9大于7 交换 5 1 2 47 96 8 3 0
9大于6 交换 5 1 2 4 76 98 3 0
9大于8 交换 5 1 2 4 7 68 93 0
9大于3 交换 5 1 2 4 7 6 83 90
9大于0 交换 5 1 2 4 7 6 8 30 9
交换次数 9
5大于1 交换1 52 4 7 6 8 3 0 9
5大于2 交换 12 54 7 6 8 3 0 9
5大于4 交换 1 24 57 6 8 3 0 9
5小于7 不动 1 2 45 76 8 3 0 9
7大于6 交换 1 2 4 56 78 3 0 9
7小于8 不动 1 2 4 5 67 83 0 9
8大于3 交换 1 2 4 5 6 73 80 9
8大于0 交换 1 2 4 5 6 7 30 89
8小于9 不动 1 2 4 5 6 7 308 9
交换次数 6
1小于2 不动1 24 5 6 7 3 0 8 9
2小于4 不动 12 45 6 7 3 0 8 9
4小于5 不动 1 24 56 7 3 0 8 9
5小于6 不动 1 2 45 67 3 0 8 9
6小于7 不动 1 2 4 56 73 0 8 9
7大于3 交换 1 2 4 5 63 70 8 9
7大于0 交换 1 2 4 5 6 30 78 9
7小于8 不动 1 2 4 5 6 3 07 89
8小于9 不动 1 2 4 5 6 3 0 78 9
交换次数 2
....
..
....
0小于1 不动0 12 3 4 5 6 7 8 9
1小于2 不动 01 23 4 5 6 7 8 9
2小于3 不动 0 12 34 5 6 7 8 9
3小于4 不动 0 1 23 45 6 7 8 9
4小于5 不动 0 1 2 34 56 7 8 9
5小于6 不动 0 1 2 3 45 67 8 9
6小于7 不动 0 1 2 3 4 56 78 9
7小于8 不动 0 1 2 3 4 5 67 89
8小于9 不动 0 1 2 3 4 5 6 78 9
交换次数 0
此时交换此时为零,排序完成。结果为0 1 2 3 4 5 6 7 8 9
代码:
#include <stdio.h>
#include <string.h>
char a={9,5,1,2,4,7,6,8,3,0}; //要进行排序的数据
char temp;//临时存放
int num; //每循环交换次数
char flag=1;//开始交换标志位
int main()
{
while(flag)
{
for(char i=0;i<9;i++)
{
if(a>a)
{
temp = a;
a=a;
a=temp;
num++;//记录每次循环交换的次数
}
}
//如果交换次数为零,说明交换完成
//退出交换
if(num==0)
{
flag = 0;
}
else //每次循环完成将num清零。
{
num=0;
}
}
//打印最终的结果。
for(char i=0;i<10;i++)
{
printf("%d\r\n",a);
}
return 0;
}
选择排序
依次比力后面的数据,将数据小的放到前面。
#include <stdio.h>
#include <string.h>
char a={9,5,1,2,4,7,6,8,3,0}; //要进行排序的数据
char i,j,n;
char temp;
int main()
{
char *p =&temp;
//获取数据的个数
n=sizeof(a)/sizeof(char);
printf("n=%d\r\n",n);
//进行交换
for (i=0;i<n;i++)
{
j=i+1;
for(j;j<n;j++)
{
if(a>a)
{
temp=a;
a=a;
a=temp;
}
}
}
//打印最终的结果。
for(char y=0;y<10;y++)
{
printf("%d\r\n",a);
}
return 0;
}
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]