找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 80|回复: 0
打印 上一主题 下一主题
收起左侧

C语言排序算法1.0

[复制链接]
跳转到指定楼层
楼主
ID:496423 发表于 2024-5-13 18:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
分享C语言写的部分排序算法,还没完善够
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>

  4. #define BUBBLE      0       //冒泡排序
  5. #define CHOOSE      1       //选择排序



  6. //插入排序
  7. //希尔排序
  8. //归并排序(迭代法)
  9. //归并排序(递归法)
  10. //快速排序(迭代法)
  11. //快速排序(递归法)
  12. //鸡尾酒排序
  13. //堆排序
  14. //计数排序
  15. //基数排序
  16. //桶排序
  17. int main(int argc,char *argv[])     //main函数的有参形式
  18. {
  19.     int arr[5] = {9,3,2,5,7};
  20.     int i = 0,j = 0;
  21.     int change_time = 0, time = 0, last_time = 0, tmp_index= 0, temp = 0;

  22.     system("cls");  //清屏

  23.     printf("原始数据:");
  24.     for(i = 0; i < 5; i++)
  25.         printf(" %d",arr[i]);
  26.    
  27.     printf("\n");

  28. #if BUBBLE
  29.     printf("\033[36m冒泡排序:\n\033[0m");
  30.     {
  31.         change_time = 0;
  32.         time = 0;   //记录排序次数
  33.         last_time = 0;

  34.         for(i = 0;i < 5 - 1; i++)
  35.         {
  36.             //每一次冒泡
  37.             for(j = 0;j < 5-1-i;j++)
  38.             {
  39.                 if(arr[j] > arr[j+1])
  40.                 {
  41.                     int temp = arr[j];
  42.                     arr[j] = arr[j+1];
  43.                     arr[j+1] = temp;

  44.                     time++;
  45.                 }
  46.             }

  47.             if(time == last_time)
  48.             {
  49.                 printf("排序完成,内循环次数:%d,交换次数:%d\n",i+1,time);
  50.                 break;
  51.             }
  52.             last_time = time;
  53.         }
  54.     }
  55. #endif

  56. #if CHOOSE
  57.     printf("\033[36m选择排序:\n\033[0m");
  58.     {
  59.         change_time = 0;
  60.         time = 0;   //记录排序次数
  61.         last_time = 0;

  62.         for(i = 0;i < 5 - 1; i++)
  63.         {
  64.             tmp_index = i;   //tmp_index 此时代表最小值的下标

  65.             for(j = i;j < 5;j++)
  66.             {
  67.                 if(arr[j] < arr[tmp_index])
  68.                 {
  69.                     tmp_index = j;

  70.                     time++;
  71.                 }
  72.             }

  73.             if(tmp_index != i)
  74.             {
  75.                 int temp = arr[tmp_index];
  76.                 arr[tmp_index] = arr[i];
  77.                 arr[i] = temp;

  78.                 change_time++;
  79.             }

  80.             if(i == 3)
  81.             {
  82.                 printf("排序完成,内循环次数:%d,选择次数: %d,交换次数: %d\n",i+1,time,change_time);
  83.                 break;
  84.             }
  85.             last_time = time;
  86.         }
  87.     }
  88. #endif









  89.     printf("最终结果:");
  90.     for(i = 0; i < 5; i++)
  91.         printf(" %d",arr[i]);
  92.    
  93.     printf("\n\n按任意键退出\n");
  94.     system("pause");
  95.     return 0;
  96. }
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表