汕尾海湾 发表于 2025-3-23 08:41:10

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]
查看完整版本: C语言-排序