C语言-排序
C语言-排序
- 冒泡排序
- 选择排序
冒泡排序
两两比较,大的放后面。
每比较一轮,记录交换的次数。当交换的次数为零时,则表示排序完成。
char a[10]={9,5,1,2,4,7,6,8,3,0};
9大于5 交换 5 9 1 2 4 7 6 8 3 0
9大于1 交换 5 1 9 2 4 7 6 8 3 0
9大于2 交换 5 1 2 9 4 7 6 8 3 0
9大于4 交换 5 1 2 4 9 7 6 8 3 0
9大于7 交换 5 1 2 4 7 9 6 8 3 0
9大于6 交换 5 1 2 4 7 6 9 8 3 0
9大于8 交换 5 1 2 4 7 6 8 9 3 0
9大于3 交换 5 1 2 4 7 6 8 3 9 0
9大于0 交换 5 1 2 4 7 6 8 3 0 9
交换次数 9
5大于1 交换 1 5 2 4 7 6 8 3 0 9
5大于2 交换 1 2 5 4 7 6 8 3 0 9
5大于4 交换 1 2 4 5 7 6 8 3 0 9
5小于7 不动 1 2 4 5 7 6 8 3 0 9
7大于6 交换 1 2 4 5 6 7 8 3 0 9
7小于8 不动 1 2 4 5 6 7 8 3 0 9
8大于3 交换 1 2 4 5 6 7 3 8 0 9
8大于0 交换 1 2 4 5 6 7 3 0 8 9
8小于9 不动 1 2 4 5 6 7 3 0 8 9
交换次数 6
1小于2 不动 1 2 4 5 6 7 3 0 8 9
2小于4 不动 1 2 4 5 6 7 3 0 8 9
4小于5 不动 1 2 4 5 6 7 3 0 8 9
5小于6 不动 1 2 4 5 6 7 3 0 8 9
6小于7 不动 1 2 4 5 6 7 3 0 8 9
7大于3 交换 1 2 4 5 6 3 7 0 8 9
7大于0 交换 1 2 4 5 6 3 0 7 8 9
7小于8 不动 1 2 4 5 6 3 0 7 8 9
8小于9 不动 1 2 4 5 6 3 0 7 8 9
交换次数 2
....
..
....
0小于1 不动 0 1 2 3 4 5 6 7 8 9
1小于2 不动 0 1 2 3 4 5 6 7 8 9
2小于3 不动 0 1 2 3 4 5 6 7 8 9
3小于4 不动 0 1 2 3 4 5 6 7 8 9
4小于5 不动 0 1 2 3 4 5 6 7 8 9
5小于6 不动 0 1 2 3 4 5 6 7 8 9
6小于7 不动 0 1 2 3 4 5 6 7 8 9
7小于8 不动 0 1 2 3 4 5 6 7 8 9
8小于9 不动 0 1 2 3 4 5 6 7 8 9
交换次数 0
此时交换此时为零,排序完成。结果为0 1 2 3 4 5 6 7 8 9
代码:
#include <stdio.h>
#include <string.h>
char a[10]={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[i]>a[i+1])
{
temp = a[i+1];
a[i+1]=a[i];
a[i]=temp;
num++; //记录每次循环交换的次数
}
}
//如果交换次数为零,说明交换完成
//退出交换
if(num==0)
{
flag = 0;
}
else //每次循环完成将num清零。
{
num=0;
}
}
//打印最终的结果。
for(char i=0;i<10;i++)
{
printf("%d\r\n",a[i]);
}
return 0;
}
选择排序
依次比较后面的数据,将数据小的放到前面。
#include <stdio.h>
#include <string.h>
char a[10]={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[i]>a[j])
{
temp=a[j];
a[j]=a[i];
a[i]=temp;
}
}
}
//打印最终的结果。
for(char y=0;y<10;y++)
{
printf("%d\r\n",a[y]);
}
return 0;
}