C语言-排序

打印 上一主题 下一主题

主题 1003|帖子 1003|积分 3009

冒泡排序

   两两比力,大的放后面。
每比力一轮,纪录交换的次数。当交换的次数为零时,则表示排序完成。
  1. char a[10]={9,5,1,2,4,7,6,8,3,0};
  2. 9大于5 交换  5 9  1 2 4 7 6 8 3 0   
  3. 9大于1 交换 5  1 9  2 4 7 6 8 3 0
  4. 9大于2 交换 5 1  2 9  4 7 6 8 3 0
  5. 9大于4 交换 5 1 2  4 9  7 6 8 3 0
  6. 9大于7 交换 5 1 2 4  7 9  6 8 3 0
  7. 9大于6 交换 5 1 2 4 7  6 9  8 3 0
  8. 9大于8 交换 5 1 2 4 7 6  8 9  3 0
  9. 9大于3 交换 5 1 2 4 7 6 8  3 9  0
  10. 9大于0 交换 5 1 2 4 7 6 8 3  0 9
  11. 交换次数 9
  12. 5大于1 交换  1 5  2 4 7 6 8 3 0 9
  13. 5大于2 交换 1  2 5  4 7 6 8 3 0 9
  14. 5大于4 交换 1 2  4 5  7 6 8 3 0 9
  15. 5小于7 不动 1 2 4  5 7  6 8 3 0 9
  16. 7大于6 交换 1 2 4 5  6 7  8 3 0 9
  17. 7小于8 不动 1 2 4 5 6  7 8  3 0 9
  18. 8大于3 交换 1 2 4 5 6 7  3 8  0 9
  19. 8大于0 交换 1 2 4 5 6 7 3  0 8  9
  20. 8小于9 不动 1 2 4 5 6 7 3  0  8 9
  21. 交换次数 6
  22. 1小于2 不动  1 2  4 5 6 7 3 0 8 9
  23. 2小于4 不动 1  2 4  5 6 7 3 0 8 9
  24. 4小于5 不动 1 2  4 5  6 7 3 0 8 9
  25. 5小于6 不动 1 2 4  5 6  7 3 0 8 9
  26. 6小于7 不动 1 2 4 5  6 7  3 0 8 9
  27. 7大于3 交换 1 2 4 5 6  3 7  0 8 9
  28. 7大于0 交换 1 2 4 5 6 3  0 7  8 9
  29. 7小于8 不动 1 2 4 5 6 3 0  7 8  9
  30. 8小于9 不动 1 2 4 5 6 3 0 7  8 9
  31. 交换次数 2
  32. ....
  33. ..
  34. ....
  35. 0小于1 不动  0 1  2 3 4 5 6 7 8 9
  36. 1小于2 不动 0  1 2  3 4 5 6 7 8 9
  37. 2小于3 不动 0 1  2 3  4 5 6 7 8 9
  38. 3小于4 不动 0 1 2  3 4  5 6 7 8 9
  39. 4小于5 不动 0 1 2 3  4 5  6 7 8 9
  40. 5小于6 不动 0 1 2 3 4  5 6  7 8 9
  41. 6小于7 不动 0 1 2 3 4 5  6 7  8 9
  42. 7小于8 不动 0 1 2 3 4 5 6  7 8  9
  43. 8小于9 不动 0 1 2 3 4 5 6 7  8 9
  44. 交换次数 0
  45. 此时交换此时为零,排序完成。结果为0 1 2 3 4 5 6 7 8 9
复制代码
代码:
  1. #include <stdio.h>
  2. #include <string.h>
  3. char a[10]={9,5,1,2,4,7,6,8,3,0}; //要进行排序的数据
  4. char temp;//临时存放
  5. int num; //每循环交换次数
  6. char flag=1;//开始交换标志位
  7. int main()
  8. {
  9.     while(flag)
  10.     {
  11.         for(char i=0;i<9;i++)
  12.         {
  13.             if(a[i]>a[i+1])
  14.             {
  15.                 temp = a[i+1];
  16.                 a[i+1]=a[i];
  17.                 a[i]=temp;
  18.                 num++;  //记录每次循环交换的次数
  19.             }
  20.         }
  21.          //如果交换次数为零,说明交换完成
  22.          //退出交换
  23.         if(num==0)
  24.         {
  25.             flag = 0;
  26.         }
  27.         else //每次循环完成将num清零。
  28.         {
  29.             num=0;
  30.         }
  31.     }
  32.     //打印最终的结果。
  33.     for(char i=0;i<10;i++)
  34.     {
  35.         printf("%d\r\n",a[i]);
  36.     }
  37.     return 0;
  38. }
复制代码
选择排序

   依次比力后面的数据,将数据小的放到前面。
  1. #include <stdio.h>
  2. #include <string.h>
  3. char a[10]={9,5,1,2,4,7,6,8,3,0}; //要进行排序的数据
  4. char i,j,n;
  5. char temp;
  6. int main()
  7. {
  8.     char *p =&temp;
  9.     //获取数据的个数
  10.     n=sizeof(a)/sizeof(char);
  11.     printf("n=%d\r\n",n);
  12.     //进行交换
  13.     for (i=0;i<n;i++)
  14.     {
  15.         j=i+1;
  16.         for(j;j<n;j++)
  17.         {
  18.             if(a[i]>a[j])
  19.             {
  20.                 temp=a[j];
  21.                 a[j]=a[i];
  22.                 a[i]=temp;
  23.             }
  24.         }
  25.     }
  26.    
  27.     //打印最终的结果。
  28.     for(char y=0;y<10;y++)
  29.     {
  30.         printf("%d\r\n",a[y]);
  31.     }
  32.     return 0;
  33. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

汕尾海湾

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表