排序的四种算法
来源:互联网 发布:马刺 知乎 编辑:程序博客网 时间:2024/06/11 19:11
#include <stdio.h>#include <stdlib.h>#include <time.h>#include <Windows.h>// 生成 num 个范围在 0~max 之间的整数void CreateInt(int *p, int num, int max);// 演示排序函数int ShowSort(int *p, int num, HANDLE hOut, WORD corBase);void CompareSort(int *p, int num, HANDLE hOut, WORD corBase, WORD color, int speed);void SelectSort(int *p, int num, HANDLE hOut, WORD corBase, WORD color, int speed);void InsertSort(int *p, int num, HANDLE hOut, WORD corBase, WORD color, int speed);void PopSort(int *p, int num, HANDLE hOut, WORD corBase, WORD color, int speed);int main(int argc ,char **argv){srand((unsigned int)time(NULL));HANDLE hOut; // typedef void *HANDLE;WORD corBase = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY; // typedef unsigned short WORD;hOut = GetStdHandle(STD_OUTPUT_HANDLE);//返回标准的输入、输出或错误的设备的句柄,也就是获得输入、输出/错误的屏幕缓冲区的句柄SetConsoleTextAttribute(hOut, corBase);int num[10];CreateInt(num, 10, 100);while (ShowSort(num, 10, hOut, corBase));getchar();getchar();return 0;}// 生成 num 个范围在 0~max 之间的整数void CreateInt(int *p, int num, int max){puts("生成10个随机数,如下:");for (int i=0; i<10; i++){p[i] = rand()%max;printf("%d ", p[i]);}puts("\n");}// 四种排序函数int ShowSort(int *p, int num, HANDLE hOut, WORD corBase){SetConsoleTextAttribute(hOut, corBase);// 选择排序方法int index;puts("请选择需要演示的排序方法:");puts("1. 比较法 2. 选择法 3. 插入法 4. 冒泡法 0. 退出");scanf("%d", &index);puts("");if (index == 0)return index;// 设置 演示 属性int n;WORD color;puts("选择字体颜色:1. 红色 2. 绿色 3. 蓝色");scanf("%d", &n);if (n == 1)color = FOREGROUND_RED | FOREGROUND_INTENSITY;else if (n == 2)color = FOREGROUND_GREEN | FOREGROUND_INTENSITY;elsecolor = FOREGROUND_BLUE | FOREGROUND_INTENSITY;puts("选择演示速度:1. 快 2. 中 3. 慢");scanf("%d", &n);puts("");// 判断排序方式,执行演示和排序switch (index){case 1:// 比较法排序CompareSort(p, num, hOut, corBase, color, n);break;case 2:// 选择法排序SelectSort(p, num, hOut, corBase, color, n);break;case 3:// 插入法排序InsertSort(p, num, hOut, corBase, color, n);break;case 4:// 冒泡法排序PopSort(p, num, hOut, corBase, color, n);break;default:break;}return index;}// 比较法排序void CompareSort(int *p, int num, HANDLE hOut, WORD corBase, WORD color, int speed){int res[10];for (int i=0; i<num; i++)res[i] = p[i];puts("比较法排序过程,如下:");printf(" ");for (int i=0; i<num; i++)printf("%d ", p[i]);puts("");for (int i=0; i<num-1; i++){printf("第%d轮 结果:", i+1);int tag = 0;for (int j=i+1; j<num; j++){if (res[i] > res[j]){int tmp = res[i];res[i] = res[j];res[j] = tmp;// 输出if (tag == 0)tag = 1;else{printf(" ");}for(int k=0; k<num; k++){if (k <= i)SetConsoleTextAttribute(hOut, color);elseSetConsoleTextAttribute(hOut, corBase);printf("%d ", res[k]);}puts("");Sleep(speed*700);}}}puts("演示完毕\n");}// 选择法排序void SelectSort(int *p, int num, HANDLE hOut, WORD corBase, WORD color, int speed){int res[10];for (int i=0; i<num; i++)res[i] = p[i];puts("选择法排序过程,如下:");printf(" ");for (int i=0; i<num; i++)printf("%d ", p[i]);puts("");for (int i=0; i<num-1; i++){printf("第%d轮 结果:", i+1);int min=i;for (int j=i; j<num; j++){if (res[min] > res[j])min = j;}// 交换int tmp = res[i];res[i] = res[min];res[min] = tmp;// 输出for(int k=0; k<num; k++){if (k <= i)SetConsoleTextAttribute(hOut, color);elseSetConsoleTextAttribute(hOut, corBase);printf("%d ", res[k]);}puts("");Sleep(speed*700);}puts("演示完毕\n");}// 插入法排序void InsertSort(int *p, int num, HANDLE hOut, WORD corBase, WORD color, int speed){int res[11];for (int i=0; i<num+1; i++)res[i] = -1;puts("插入法排序过程,如下:\n");printf(" ");for (int i=0; i<num; i++)printf("%d ", p[i]);puts("");for (int i=0; i<num; i++){printf("第%d轮 结果:", i+1);for(int j=i; j>=0; j--){if (res[j] < p[i]){res[j+1] = p[i];break;}elseres[j+1] = res[j];}// 输出for(int k=1; k<num+1; k++){if (k <= i+1)SetConsoleTextAttribute(hOut, color);elseSetConsoleTextAttribute(hOut, corBase);if (res[k] != -1)printf("%d ", res[k]);}puts("");Sleep(speed*700);}puts("演示完毕\n");}// 冒泡法排序void PopSort(int *p, int num, HANDLE hOut, WORD corBase, WORD color, int speed){int res[10];for (int i=0; i<num; i++)res[i] = p[i];puts("冒泡法排序过程,如下:\n");printf(" ");for (int i=0; i<num; i++)printf("%d ", p[i]);puts("");int tag = 0, tag1 = 0;for(int i=0; i<num-1; i++){SetConsoleTextAttribute(hOut, corBase);printf("第%d轮 结果:", i+1);tag = tag1 = 0;for (int j=0; j<num-i-1; j++){if (res[j] > res[j+1]){int tmp = res[j+1];res[j+1] = res[j];res[j] = tmp;tag = 1;// 输出if (tag1 == 0)tag1 = 1;else{printf(" ");}for(int k=0; k<num; k++){if (k==j+1 || k>(num-i-1))SetConsoleTextAttribute(hOut, color);elseSetConsoleTextAttribute(hOut, corBase);printf("%d ", res[k]);}puts("");Sleep(speed*700);}}if (tag == 0){puts("");break;}}puts("演示完毕\n");}
0 0
- 排序的四种算法
- 四种排序算法
- 四种排序算法
- 四种排序算法
- 算法--四种排序
- 四种排序算法
- C#的四种排序算法
- C#的四种排序算法
- C#的四种排序算法
- C#的四种排序--经典算法
- C#的四种排序算法
- C#的四种排序算法
- C#的四种排序算法
- C#的四种排序算法
- c#的四种排序算法
- C#的四种排序算法
- C#的四种排序算法
- 四种简单的排序算法
- 冒泡排序冒小和冒大
- linux下autoscan, aclocal, autoconf, automake以及Makefile.am, Configure.in等文件和工具的使用
- 关于网站自动发送邮箱的学习
- 用友软件力推海尔、美的、TCL等伙伴产业互联网化
- jfreechart 简单柱状图
- 排序的四种算法
- MYSQL中KEY问题
- ERP条码解决方案,金蝶盘点机条码解决方案,应用PDA的信息化管理能给我们的生产管理带来怎么样的变化的探讨
- SSH框架搭建遇到的问题-----java.lang.NoClassDefFoundError: org/apache/commons/collections/map/LRUMap
- 网上看到的一篇收藏自己看
- 字符串----找出字符串中第一个只出现一次字符
- POJ 2749 Building roads(2-SAT)
- fzu 1921
- 豆豆名字备选(未完待续)