求C 高手做一个排序系统,用C 做。(一定要是C )!
#include #define NUM 5 //无序表元素个数#define MAX 1000 //元素最大值using namespace std;int list[NUM*10]={0}; //存储无序表及排序结果int merge_list[NUM*10]={0}; //归并排序时用于存无序表int merge_link[NUM*10]={0}; //归并排序时辅助 void init();void init_list(int);void out(int[], int, int);void swap(int, int);//1 直接插入排序 --------------------...全部
#include #define NUM 5 //无序表元素个数#define MAX 1000 //元素最大值using namespace std;int list[NUM*10]={0}; //存储无序表及排序结果int merge_list[NUM*10]={0}; //归并排序时用于存无序表int merge_link[NUM*10]={0}; //归并排序时辅助 void init();void init_list(int);void out(int[], int, int);void swap(int, int);//1 直接插入排序 -------------------------------------------------------void insert_sort(int len){ int insertNum; for (int i=0; i0 && insertNum list[middle]) left = middle 1; else right = middle-1; } for (int j=i; j>left; j--) list[j] = list[j-1]; list[left] = insertNum; }}//3 希尔排序------------------------------------------------------------void shell_sort(int len){ int insertNum; int gap = len/2; //初始增量 while (gap) //当gap>=1 { for (int i=gap; i=gap && insertNum= list[child]) break; //temp的关键码大则不做调整 else //否则子女中的大者上移 { list[current] = list[child]; current = child; child = 2*child 1; } } list[current] = temp; //temp中暂存元素放到合适位置}void heap_sort(int len){ for (int i=(len-2)/2; i>=0; i--) filterDown(i, len-1); //建立堆 for (i=len-1; i>0; i--) { swap(0, i); filterDown(0, i-1); //不断调整堆为最大堆 } }//6 冒泡排序------------------------------------------------------------void bubble_sort(int len){ for (int i=0; i list[j]) swap(i, j);}//7 Shaker排序------------------------------------------------------------void shaker_sort(int len){ int i, left = 0, right = len - 1,shift = 0; while(left list[i 1]) { swap(i, i 1); shift = i; } } right = shift; for(i = right; i > left; i--) //向左进行气泡排序 { if(list[i] =pivot) j--; //找到比基数小的元素 if(i =right) return left; int middle = (left right)/2; //对左右两子序列进行归并 return list_merge(merge_sort(left,middle), merge_sort(middle 1,right)); }//10 计数排序void counting_sort(int len, int max){ int result[NUM]; //临时保存结果 int* mark = new int[max]; //标记无序表中元素 memset(mark, 0, max * sizeof(int)); for (int i = 0; i = 0; i--) { result[mark[list[i]] - 1] = list[i];//通过mark[]直接将list[i] mark[list[i]]--; //有序存入result[] } delete []mark; //转存到list以便输出结果 for (i=0; i> inp; init_list(inp); //初始化无序表 switch(inp) //各种排序 { case 1: insert_sort(NUM);break; case 2: binary_insert_sort(NUM);break; case 3: shell_sort(NUM);break; case 4: select_sort(NUM);break; case 5: heap_sort(NUM);break; case 6: bubble_sort(NUM);break; case 7: shaker_sort(NUM);break; case 8: quick_sort(0, NUM-1);break; case 9: merge_sort(1, NUM);break; case 10:counting_sort(NUM, MAX);break; case 0: exit(0);break; } cout if (inp!=9) out(list, 0, NUM); else { int i = merge_link[0]; int j = 0; while (i) { j ; cout i = merge_link[i]; if (j == 0) cout } cout } } return 0;}// 辅助方法---------------------------------------------------------------// 初始化界面void init(){ cout cout cout cout cout cout cout cout cout cout cout cout cout cout cout }//初始化无序表void init_list(int inp){ if (inp == 0) return; cout if (inp == 9) //为归并排序生成无序表 { for (int i=1; i { merge_list[i] = rand()%MAX; merge_link[i] = 0; } out(merge_list,1,NUM); } else //为其他排序生成无序表 { for (int i=0; i out(list, 0, NUM); }}// 输出结果void out(int result[], int st, int len){ for (int i=st; i { cout if ((i 1) == 0) cout } cout }//交换list[i]和list[j]void swap(int i, int j){ int temp = list[i]; list[i] = list[j]; list[j] = temp;}。
收起