分享C语言写的部分排序算法,还没完善够 。- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define BUBBLE 0 //冒泡排序
- #define CHOOSE 1 //选择排序
- //插入排序
- //希尔排序
- //归并排序(迭代法)
- //归并排序(递归法)
- //快速排序(迭代法)
- //快速排序(递归法)
- //鸡尾酒排序
- //堆排序
- //计数排序
- //基数排序
- //桶排序
- int main(int argc,char *argv[]) //main函数的有参形式
- {
- int arr[5] = {9,3,2,5,7};
- int i = 0,j = 0;
- int change_time = 0, time = 0, last_time = 0, tmp_index= 0, temp = 0;
- system("cls"); //清屏
- printf("原始数据:");
- for(i = 0; i < 5; i++)
- printf(" %d",arr[i]);
-
- printf("\n");
- #if BUBBLE
- printf("\033[36m冒泡排序:\n\033[0m");
- {
- change_time = 0;
- time = 0; //记录排序次数
- last_time = 0;
- for(i = 0;i < 5 - 1; i++)
- {
- //每一次冒泡
- for(j = 0;j < 5-1-i;j++)
- {
- if(arr[j] > arr[j+1])
- {
- int temp = arr[j];
- arr[j] = arr[j+1];
- arr[j+1] = temp;
- time++;
- }
- }
- if(time == last_time)
- {
- printf("排序完成,内循环次数:%d,交换次数:%d\n",i+1,time);
- break;
- }
- last_time = time;
- }
- }
- #endif
- #if CHOOSE
- printf("\033[36m选择排序:\n\033[0m");
- {
- change_time = 0;
- time = 0; //记录排序次数
- last_time = 0;
- for(i = 0;i < 5 - 1; i++)
- {
- tmp_index = i; //tmp_index 此时代表最小值的下标
- for(j = i;j < 5;j++)
- {
- if(arr[j] < arr[tmp_index])
- {
- tmp_index = j;
- time++;
- }
- }
- if(tmp_index != i)
- {
- int temp = arr[tmp_index];
- arr[tmp_index] = arr[i];
- arr[i] = temp;
- change_time++;
- }
- if(i == 3)
- {
- printf("排序完成,内循环次数:%d,选择次数: %d,交换次数: %d\n",i+1,time,change_time);
- break;
- }
- last_time = time;
- }
- }
- #endif
- printf("最终结果:");
- for(i = 0; i < 5; i++)
- printf(" %d",arr[i]);
-
- printf("\n\n按任意键退出\n");
- system("pause");
- return 0;
- }
复制代码
|