数据结构(c语言版)学习笔记——排序算法

这几日整理出了大一时学习的数据结构中排序算法中的部分内容,写了一个简单的排序算法的程序。想写出来分享一下,也算是自己的学习日记。

程序功能是: 输入一个待排序记录序列,选择一种算法,然后输出一个有序的序列。

一、运行过程及截图如下:

1、输入一个有序序列长度,回车,输入各个记录的关键字,如下图

2、回车,打印出算法选择列表,选择你要选择的算法(比如选1、直接插入排序)


3、回车,得到输出结果


二、代码实现过程(VS 2013)

1、新建一个win 32控制台应用程序,分别为插入排序、交换排序、选择排序和归并排序各建立一个文件,如下图:


2、代码编写

2.1插入排序

2.1.1直接插入排序算法实现

[cpp]  view plain  copy
  1. //直接插入排序  
  2. void DirectInsertSort(Record r[], int length)     
  3. //参数Record[]为排序的数据元素序列,length表示序列长度  
  4. {  
  5. <span style="white-space:pre">  </span>r[0] = r[i]; //r[0]用作监视哨,将带插入的记录放进去  
  6.     int i, j;  
  7.     for (i = 2; i <= length; i++)  
  8.     {  
  9.     <span style="white-space:pre">  </span>r[j + 1] = r[j];  
  10.         j = i - 1;  
  11.         while (r[0].key < r[j].key)  
  12.         {  
  13.             j--;  
  14.             }  
  15.     }  
  16.     r[j + 1] = r[0];  
  17. }  
2.1.2 二分插入排序算法实现

[cpp]  view plain  copy
  1. <span style="white-space:pre">      </span>//二分插入排序  
  2. <span style="white-space:pre">      </span>void BinaryInsertSort(Record r[], int length)  
  3. <span style="white-space:pre">      </span>//r[]为排序的数据元素序列,length表示序列长度  
  4. <span style="white-space:pre">      </span>{  
  5.     <span style="white-space:pre">      </span>int i, j;  
  6.     <span style="white-space:pre">      </span>int mid, high;  
  7.     <span style="white-space:pre">      </span>int low;  
  8.   
  9.     <span style="white-space:pre">      </span>for (i = 2; i <= length; i++)  
  10.     <span style="white-space:pre">      </span>{  
  11.         <span style="white-space:pre">      </span>r[0] = r[i]; //r[0]用作监视哨,将带插入的记录放进去  
  12.         <span style="white-space:pre">      </span>low = 1;  
  13.         <span style="white-space:pre">      </span>high = i - 1;  
  14.         <span style="white-space:pre">      </span>while (low <= high)   //while循环找出要插入的位置  
  15.         <span style="white-space:pre">      </span>{  
  16.             <span style="white-space:pre">      </span>mid = (low + high) / 2;  
  17.             <span style="white-space:pre">      </span>if (r[i].key < r[mid].key)  
  18.             <span style="white-space:pre">      </span> high = mid - 1;  
  19.             <span style="white-space:pre">      </span>else low = mid + 1;  
  20.         <span style="white-space:pre">      </span>}  
  21.         <span style="white-space:pre">      </span>for (j = i - 1; j >= low; --j)  
  22.             <span style="white-space:pre">      </span>r[j + 1] = r[j];     //记录向后移动  
  23.         <span style="white-space:pre">      </span>r[low] = r[0];       //插入记录  
  24.     <span style="white-space:pre">      </span>}  
  25. <span style="white-space:pre">      </span>}  
2.1.3 希尔排序算法实现

[cpp]  view plain  copy
  1. <span style="white-space:pre">      </span>//单趟希尔排序  
  2. <span style="white-space:pre">      </span>void SingleShellInsert_Sort(Record r[], int length, int d)  
  3. <span style="white-space:pre">      </span>//r[]为排序的数据元素序列,length表示序列长度,d表示第一次的增量  
  4. <span style="white-space:pre">      </span>{  
  5. <span style="white-space:pre">      </span> int i, j;  
  6.     <span style="white-space:pre">      </span>for (i = 1 + d; i <= length; i++)  
  7.     <span style="white-space:pre">      </span>{  
  8.     <span style="white-space:pre">      </span> if (r[i].key < r[i - d].key)  
  9.     <span style="white-space:pre">      </span> {  
  10.     <span style="white-space:pre">      </span>     r[0] = r[i];    //备份r[i],不做监视哨  
  11.     <span style="white-space:pre">      </span>     j = i - d;  
  12.     <span style="white-space:pre">      </span>     while (j>0 && r[0].key < r[j].key)  
  13.         <span style="white-space:pre">      </span> {  
  14.         <span style="white-space:pre">      </span>     r[j + d] = r[j];  
  15.         <span style="white-space:pre">      </span>     j = j - d;  
  16.         <span style="white-space:pre">      </span> }  
  17.         <span style="white-space:pre">      </span> r[j + d] = r[0];  
  18.         <span style="white-space:pre">      </span>}  
  19.     <span style="white-space:pre">      </span>}  
  20. <span style="white-space:pre">      </span>}  
  21. <span style="white-space:pre">      </span>//希尔排序  
  22. <span style="white-space:pre">      </span>void ShellInsertSort(Record r[], int length, int d[], int n)  
  23. <span style="white-space:pre">      </span>/*r[]为排序的数据元素序列,length表示数组r的长度,d[]是增量数组,n是数组d的长度*/  
  24. <span style="white-space:pre">      </span>{  
  25. <span style="white-space:pre">      </span> int i;  
  26. <span style="white-space:pre">      </span> for (i = 0; i < n; i++)  
  27. <span style="white-space:pre">      </span>     Single_ShellInsertSort(r, length, d[i]);  
  28. <span style="white-space:pre">      </span>}  
2.2 交换排序

2.2.1冒泡排序算法实现

[cpp]  view plain  copy
  1. <span style="white-space:pre">      </span>//冒泡排序  
  2. <span style="white-space:pre">      </span>void BubbleSort(Record r[], int length)  
  3. <span style="white-space:pre">      </span>{  
  4.     <span style="white-space:pre">      </span>int mark;    //标志,当没有交换操作时为0,有交换操作时为1  
  5.     <span style="white-space:pre">      </span>int i, j;    //计数变量  
  6.     <span style="white-space:pre">      </span>for (i = 1; i <= length; i++)  
  7.     <span style="white-space:pre">      </span>{  
  8.     <span style="white-space:pre">      </span> mark = 0;  
  9.     <span style="white-space:pre">      </span> for (j = i+1; j <= length; j++)  
  10.     <span style="white-space:pre">      </span> {   //两两相邻进行比较,若逆序,则交换位置  
  11.     <span style="white-space:pre">      </span>     if (r[i].key > r[i + 1].key)  
  12.     <span style="white-space:pre">      </span>     {  
  13.         <span style="white-space:pre">      </span>     r[0] = r[i];  
  14.         <span style="white-space:pre">      </span>     r[i] = r[i - 1];  
  15.         <span style="white-space:pre">      </span>     r[i - 1] = r[i];  
  16.         <span style="white-space:pre">      </span>     mark = 1;  
  17.         <span style="white-space:pre">      </span> }  
  18.         <span style="white-space:pre">      </span> if (mark == 0) break;  
  19.         <span style="white-space:pre">      </span>}  
  20.     <span style="white-space:pre">      </span>}  
  21. <span style="white-space:pre">      </span>}  
2.2.2 快速排序算法实现

[cpp]  view plain  copy
  1. <span style="white-space:pre">      </span>//单趟快速排序,返回枢轴元素的位置  
  2. <span style="white-space:pre">      </span>int SingleQuickSort(Record r[], int low, int high)     
  3. <span style="white-space:pre">      </span>{  
  4.     <span style="white-space:pre">      </span>//low是待排序列的下边界,high是待排序列的上边界  
  5.     <span style="white-space:pre">      </span>Record temp;  
  6.     <span style="white-space:pre">      </span>int i, j;  
  7.   
  8.     <span style="white-space:pre">      </span>i = low;  
  9.     <span style="white-space:pre">      </span>j = high;  
  10.     <span style="white-space:pre">      </span>temp = r[low];  
  11.     <span style="white-space:pre">      </span>while (i < j)  
  12.     <span style="white-space:pre">      </span>{  
  13.     <span style="white-space:pre">      </span> while (r[j].key >= temp.key)<span style="white-space:pre">   </span>//high 从右到左找小于temp.key的记录  
  14.     <span style="white-space:pre">      </span>     j--;  
  15.         <span style="white-space:pre">      </span>if (i < j)  
  16.         <span style="white-space:pre">      </span>{  
  17.             <span style="white-space:pre">      </span>r[i] = r[j];  
  18.             <span style="white-space:pre">      </span>i++;  
  19.         <span style="white-space:pre">      </span>}  
  20.         <span style="white-space:pre">      </span>while (i < j&&r[i].key < temp.key)<span style="white-space:pre">   </span>//low从左到右找大于temp.key的记录  
  21.             <span style="white-space:pre">      </span>i++;  
  22.         <span style="white-space:pre">      </span>if (i < j)  
  23.         <span style="white-space:pre">      </span>{  
  24.         <span style="white-space:pre">      </span> r[j] = r[i];  
  25.             <span style="white-space:pre">      </span>j--;  
  26.         <span style="white-space:pre">      </span>}  
  27.     <span style="white-space:pre">      </span>}  
  28.     <span style="white-space:pre">      </span>r[i] = temp; //退出循环时必有i=j  
  29.     <span style="white-space:pre">      </span>return i;  
  30. <span style="white-space:pre">      </span>}  
  31. <span style="white-space:pre">      </span>//快速排序  
  32. <span style="white-space:pre">      </span>void QuickSort(Record r[], int low, int high)  
  33. <span style="white-space:pre">      </span>{  
  34.     <span style="white-space:pre">      </span>int pos;  
  35.     <span style="white-space:pre">      </span>if (low < high)  
  36.     <span style="white-space:pre">      </span>{  
  37.     <span style="white-space:pre">      </span> pos = SingleQuickSort(r, low, high);  
  38.     <span style="white-space:pre">      </span> Quick_Sort(r, low, pos - 1);  
  39.     <span style="white-space:pre">      </span> Quick_Sort(r, pos + 1, high);  
  40.     <span style="white-space:pre">      </span>}  
  41. <span style="white-space:pre">      </span>}  
2.3 选择排序

2.3.1简单选择排序算法实现

[cpp]  view plain  copy
  1. <span style="white-space:pre">      </span>//简单选择排序  
  2. <span style="white-space:pre">      </span>void SimpleSelectSort(Record r[], int length)  
  3. <span style="white-space:pre">      </span>{  
  4.     <span style="white-space:pre">      </span>int i, j;    //计数变量  
  5.     <span style="white-space:pre">      </span>int k;   //记录没趟选择最小值的位置  
  6.     <span style="white-space:pre">      </span>Record temp;  
  7.   
  8.     <span style="white-space:pre">      </span>for (i = 1; i < length; i++)  
  9.     <span style="white-space:pre">      </span>{  
  10.     <span style="white-space:pre">      </span> r[0] = r[i];  
  11.         <span style="white-space:pre">      </span>k = i;  
  12.         <span style="white-space:pre">      </span>for (j = i + 1; j <= length; j++)  
  13.         <span style="white-space:pre">      </span>{  
  14.         <span style="white-space:pre">      </span> if (r[j].key < r[0].key)  
  15.         <span style="white-space:pre">      </span> {  
  16.             <span style="white-space:pre">      </span> r[0] = r[j];  
  17.             <span style="white-space:pre">      </span> k = j;  
  18.             <span style="white-space:pre">      </span>}  
  19.         <span style="white-space:pre">      </span>}  
  20.         <span style="white-space:pre">      </span>if (k != i)  
  21.         <span style="white-space:pre">      </span>{  
  22.         <span style="white-space:pre">      </span> temp = r[k];  
  23.         <span style="white-space:pre">      </span> r[k] = r[i];  
  24.         <span style="white-space:pre">      </span> r[i] = temp;  
  25.         <span style="white-space:pre">      </span>}  
  26.     <span style="white-space:pre">      </span>}  
  27. <span style="white-space:pre">      </span>}  
2.3.2 堆排序算法实现

[cpp]  view plain  copy
  1. <span style="white-space:pre">      </span>/* 堆排序,小顶堆 */  
  2. <span style="white-space:pre">      </span>/* 完全二叉树的性质,左右子节点的关系明确,,i节点的左孩子节点为2*i,右孩子节点为2*i+1 
  3.     <span style="white-space:pre">      </span>顺序存储的待排序列数组本身就可以反映节点之间的关系,就是一棵二叉树*/  
  4. <span style="white-space:pre">      </span>// 将二叉树调整为小顶堆  
  5. <span style="white-space:pre">      </span>void Adjust2Heap(Record r[], int length)  
  6. <span style="white-space:pre">      </span>{  
  7.     <span style="white-space:pre">      </span>int i, j;  
  8.     <span style="white-space:pre">      </span>int n = length;  //序列长度的副本,不改变length的值  
  9.     <span style="white-space:pre">      </span>Record temp;  
  10.     <span style="white-space:pre">      </span>int ID;  
  11.   
  12.     <span style="white-space:pre">      </span>for (i = n / 2; i >= 1; i--)  
  13.     <span style="white-space:pre">      </span>{    //找出非叶子节点和它的孩子中最小的,与非叶子节点交换  
  14.     <span style="white-space:pre">      </span> /*易错点:此处要考虑n是奇数还是偶数,若是奇数,则最后一个非叶子节点有两个孩子; 
  15.     <span style="white-space:pre">      </span>     若是偶数,只有一个左孩子,没有右孩子。两种情况要分开讨论,否则n为偶数时排序出错*/  
  16.         <span style="white-space:pre">      </span>ID = i;  
  17.         <span style="white-space:pre">      </span>temp = r[i];  
  18.         <span style="white-space:pre">      </span>if (i != n / 2 || n % 2 == 1)  
  19.         <span style="white-space:pre">      </span>{  
  20.         <span style="white-space:pre">      </span> if (r[i * 2].key < r[i * 2 + 1].key)  
  21.         <span style="white-space:pre">      </span> {  
  22.             <span style="white-space:pre">      </span> if (r[i * 2].key < r[i].key)  
  23.             <span style="white-space:pre">      </span> {  
  24.             <span style="white-space:pre">      </span>     r[i] = r[i * 2];  
  25.             <span style="white-space:pre">      </span>     r[i * 2] = temp;  
  26.             <span style="white-space:pre">      </span> }  
  27.             <span style="white-space:pre">      </span>}  
  28.         <span style="white-space:pre">      </span> else if (r[i * 2 + 1].key < r[i].key)  
  29.         <span style="white-space:pre">      </span> {  
  30.         <span style="white-space:pre">      </span>     r[i] = r[i * 2 + 1];  
  31.         <span style="white-space:pre">      </span>     r[i * 2 + 1] = temp;  
  32.         <span style="white-space:pre">      </span> }  
  33.         <span style="white-space:pre">      </span>}  
  34.         <span style="white-space:pre">      </span>else{  
  35.         <span style="white-space:pre">      </span> if (r[i * 2].key < r[i].key)  
  36.         <span style="white-space:pre">      </span> {  
  37.         <span style="white-space:pre">      </span>     r[i] = r[i * 2];  
  38.         <span style="white-space:pre">      </span>     r[i * 2] = temp;  
  39.         <span style="white-space:pre">      </span> }  
  40.     <span style="white-space:pre">      </span> }  
  41.     <span style="white-space:pre">      </span>}  
  42. <span style="white-space:pre">      </span>}  
  43. <span style="white-space:pre">      </span>//堆排序  
  44. <span style="white-space:pre">      </span>void HeapTreeSort(Record r[], int length)  
  45. <span style="white-space:pre">      </span>{  
  46.     <span style="white-space:pre">      </span>int i, j = 1;    //计数变量  
  47.     <span style="white-space:pre">      </span>int n = length;      //length的副本,过程中不改变length的值  
  48.     <span style="white-space:pre">      </span>Record r2[MAXSIZE];  //r[]的副本,过程中不改变r[]的值  
  49.     <span style="white-space:pre">      </span>for (i = 1; i <= length; i++)  
  50.     <span style="white-space:pre">      </span> r2[i] = r[i];  
  51.   
  52.     <span style="white-space:pre">      </span>for (n; n > 1; n--)  
  53.     <span style="white-space:pre">      </span>{  
  54.     <span style="white-space:pre">      </span> Adjust2Heap(r2, n);  
  55.     <span style="white-space:pre">      </span> r[j] = r2[1];  
  56.     <span style="white-space:pre">      </span> r2[1] = r2[n];  
  57.     <span style="white-space:pre">      </span> j++;  
  58.     <span style="white-space:pre">      </span>}  
  59.     <span style="white-space:pre">      </span>r[j] = r2[n+1];  
  60. <span style="white-space:pre">      </span>}  
2.4 归并排序算法实现

[cpp]  view plain  copy
  1. <span style="white-space:pre">      </span>/* 一次二路归并 */  
  2. <span style="white-space:pre">      </span>void SingleMergingSort(Record r1[], int low, int mid, int high, Record r2[])  
  3. <span style="white-space:pre">      </span>//将有序数组r1[]={ r1[low],r[low+1],...,r[mid] } 和有序数组 r1[]={ r1[mid+1],r1[mid+2],...,r1[high] }  
  4. <span style="white-space:pre">      </span>//合并成一个有序序列,存放在r2[low,......,high]中  
  5. <span style="white-space:pre">      </span>{  
  6.     <span style="white-space:pre">      </span>int i = low;     //r1[]前部分的指示变量  
  7.     <span style="white-space:pre">      </span>int j = mid + 1; //r1[]后部分的指示变量  
  8.     <span style="white-space:pre">      </span>int k = low;         //r2[]的位置指示变量  
  9.     <span style="white-space:pre">      </span>while (i <= mid&&j <= high)  
  10.     <span style="white-space:pre">      </span>{  
  11.     <span style="white-space:pre">      </span> if (r1[i].key < r1[j].key)  
  12.     <span style="white-space:pre">      </span> {  
  13.     <span style="white-space:pre">      </span>     r2[k] = r1[i];  
  14.     <span style="white-space:pre">      </span>     i++;  
  15.     <span style="white-space:pre">      </span> }  
  16.     <span style="white-space:pre">      </span> else{  
  17.     <span style="white-space:pre">      </span>     r2[k] = r1[j];  
  18.     <span style="white-space:pre">      </span>     j++;  
  19.     <span style="white-space:pre">      </span> }  
  20.     <span style="white-space:pre">      </span> k++;  
  21.     <span style="white-space:pre">      </span>}  
  22.     <span style="white-space:pre">      </span>while (i <= mid&&j > high)  
  23.     <span style="white-space:pre">      </span>{  
  24.     <span style="white-space:pre">      </span> r2[k] = r1[i];  
  25.     <span style="white-space:pre">      </span> k++;  
  26.     <span style="white-space:pre">      </span> i++;  
  27.     <span style="white-space:pre">      </span>}  
  28.     <span style="white-space:pre">      </span>while (i > mid&&j <= high)  
  29.     <span style="white-space:pre">      </span>{  
  30.     <span style="white-space:pre">      </span> r2[k] = r1[j];  
  31.     <span style="white-space:pre">      </span> k++;  
  32.     <span style="white-space:pre">      </span> j++;  
  33.     <span style="white-space:pre">      </span>}  
  34. <span style="white-space:pre">      </span>}  
  35.   
  36. <span style="white-space:pre">      </span>void MSort(Record r1[], int low, int high, Record r3[])  
  37. <span style="white-space:pre">      </span>//将数组r1[]排序后,存储到r3[]中,递归思想  
  38. <span style="white-space:pre">      </span>/* 要将r1[low...mid]和r1[mid+1,...high]归并排序, 
  39. <span style="white-space:pre">      </span> 得先将r[low,mid]内部分为两个子序列,调用二路归并排序 
  40. <span style="white-space:pre">      </span> 再分别对两个子序列执行同样操作; 
  41. <span style="white-space:pre">      </span> 再将r[mid+1....high]内部分为两个子序列, 
  42.     <span style="white-space:pre">      </span>同样处理,最终可得到排序结果*/  
  43. <span style="white-space:pre">      </span>{  
  44.     <span style="white-space:pre">      </span>int mid;  
  45.     <span style="white-space:pre">      </span>Record r2[MAXSIZE];      //辅助空间  
  46.     <span style="white-space:pre">      </span>if (low == high)  
  47.     <span style="white-space:pre">      </span> r3[low] = r1[low];  
  48.     <span style="white-space:pre">      </span>else{  
  49.     <span style="white-space:pre">      </span> mid = (low + high) / 2;  
  50.     <span style="white-space:pre">      </span> MSort(r1, low, mid, r2);  
  51.     <span style="white-space:pre">      </span> MSort(r1, mid + 1, high, r2);  
  52.     <span style="white-space:pre">      </span> SingleMergingSort(r2, low, mid, high, r3);  
  53.     <span style="white-space:pre">      </span>}  
  54. <span style="white-space:pre">      </span>}  
  55. <span style="white-space:pre">      </span>void MergingSort(Record r[], int length)  
  56. <span style="white-space:pre">      </span>{  
  57.     <span style="white-space:pre">      </span>MSort(r, 1, length, r);  
  58. <span style="white-space:pre">      </span>}  
2.5 主函数
[cpp]  view plain  copy
  1. <span style="white-space:pre">      </span>#include "stdafx.h"  
  2. <span style="white-space:pre">      </span>#include "InsertSort.h"  
  3. <span style="white-space:pre">      </span>#include "ExchangeSort.h"  
  4. <span style="white-space:pre">      </span>#include "SelectSort.h"  
  5. <span style="white-space:pre">      </span>#include "MergingSort.h"  
  6.   
  7. <span style="white-space:pre">      </span>int _tmain(int argc, _TCHAR* argv[])  
  8. <span style="white-space:pre">      </span>{  
  9.     <span style="white-space:pre">      </span>int len, d_len;  //排序记录长度、增量数组长度  
  10.     <span style="white-space:pre">      </span>int i;       //计数变量  
  11.     <span style="white-space:pre">      </span>int choice = 1; //选择变量  
  12.     <span style="white-space:pre">      </span>int low, high;   //快速排序的指示边界的变量  
  13.     <span style="white-space:pre">      </span>Record r[MAXSIZE];  
  14.     <span style="white-space:pre">      </span>int d[MAXSIZE];  
  15.     <span style="white-space:pre">      </span>low = 1;  
  16.   
  17.     <span style="white-space:pre">      </span>printf("请输入带排序记录长度:\n");  
  18.     <span style="white-space:pre">      </span>scanf_s("%d", &len);  
  19.     <span style="white-space:pre">      </span>high = len;  
  20.     <span style="white-space:pre">      </span>printf("请依次输入各个记录的关键字(空格隔开):\n");  
  21.     <span style="white-space:pre">      </span>for (i = 1; i <= len; i++)  
  22.     <span style="white-space:pre">      </span>{  
  23.     <span style="white-space:pre">      </span> scanf_s("%d", &r[i].key);  
  24.     <span style="white-space:pre">      </span>}  
  25.     <span style="white-space:pre">      </span>system("CLS");  
  26.     <span style="white-space:pre">      </span>//输出选择排序算法菜单  
  27. <span style="white-space:pre">      </span> while (choice != 0)  
  28. <span style="white-space:pre">      </span> {  
  29.     <span style="white-space:pre">      </span>   
  30.     <span style="white-space:pre">      </span> printf("*------------------------------------------------*\n");  
  31.     <span style="white-space:pre">      </span> printf("*\t请选择排序方法:\n");  
  32.     <span style="white-space:pre">      </span> printf("*\t1、直接插入排序\t2、二分插入排序\t3、希尔排序\n");  
  33.     <span style="white-space:pre">      </span> printf("*\t4、冒泡排序\t5、快速排序\t6、简单选择排序\n");  
  34.     <span style="white-space:pre">      </span> printf("*\t7、堆排序\t8、归并排序\t0、退出\n");  
  35.     <span style="white-space:pre">      </span> printf("*------------------------------------------------*\n");  
  36.     <span style="white-space:pre">      </span> printf("*\t请输入你的选择:\t");  
  37.     <span style="white-space:pre">      </span> scanf_s("%d", &choice);  
  38.     <span style="white-space:pre">      </span> system("cls");  
  39.     <span style="white-space:pre">      </span> switch (choice)  
  40.     <span style="white-space:pre">      </span> {  
  41.     <span style="white-space:pre">      </span> case 0:  
  42.     <span style="white-space:pre">      </span>     exit(0);  
  43.     <span style="white-space:pre">      </span>     break;  
  44.     <span style="white-space:pre">      </span> case 1:  
  45.     <span style="white-space:pre">      </span>     DirectInsertSort(r, len);  
  46.     <span style="white-space:pre">      </span>     break;  
  47.     <span style="white-space:pre">      </span> case 2:  
  48.     <span style="white-space:pre">      </span>     BinaryInsertSort(r, len);  
  49.     <span style="white-space:pre">      </span>     break;  
  50.     <span style="white-space:pre">      </span> case 3:  
  51.     <span style="white-space:pre">      </span>     printf("请输入增量数组的长度:\n");  
  52.     <span style="white-space:pre">      </span>     scanf_s("%d", &d_len);  
  53.     <span style="white-space:pre">      </span>     printf("请输入增量数组的各元素(空格隔开):\n");  
  54.         <span style="white-space:pre">      </span> for (i = 0; i < d_len; i++)  
  55.     <span style="white-space:pre">      </span>         scanf_s("%d", &d[i]);  
  56.     <span style="white-space:pre">      </span>     ShellInsertSort(r, len, d, d_len);  
  57.     <span style="white-space:pre">      </span>     break;  
  58.     <span style="white-space:pre">      </span> case 4:  
  59.     <span style="white-space:pre">      </span>     BubbleSort(r, len);  
  60.     <span style="white-space:pre">      </span>     break;  
  61.     <span style="white-space:pre">      </span> case 5:  
  62.     <span style="white-space:pre">      </span>     QuickSort(r, low, high);  
  63.     <span style="white-space:pre">      </span>     break;  
  64.     <span style="white-space:pre">      </span> case 6:  
  65.     <span style="white-space:pre">      </span>     SimpleSelectSort(r, len);  
  66.     <span style="white-space:pre">      </span>     break;  
  67.     <span style="white-space:pre">      </span> case 7:  
  68.     <span style="white-space:pre">      </span>     HeapTreeSort(r, len);  
  69.     <span style="white-space:pre">      </span>     break;  
  70.     <span style="white-space:pre">      </span> case 8:  
  71.     <span style="white-space:pre">      </span>     MergingSort(r, len);  
  72.     <span style="white-space:pre">      </span>     break;  
  73.     <span style="white-space:pre">      </span> default:  
  74.     <span style="white-space:pre">      </span>     printf("输入选择有误!");  
  75.         <span style="white-space:pre">      </span> getchar();  
  76.         <span style="white-space:pre">      </span> getchar();  
  77. <span style="white-space:pre">  </span><span style="white-space:pre">       </span>     exit(0);  
  78.     <span style="white-space:pre">      </span> }  
  79.     <span style="white-space:pre">      </span> printf("排序结果如下:\n");  
  80.         <span style="white-space:pre">      </span>for (i = 1; i <= len; i++)  
  81.         <span style="white-space:pre">      </span> printf("  %d", r[i].key);  
  82.         <span style="white-space:pre">      </span>getchar();  
  83.         <span style="white-space:pre">      </span>getchar();  
  84.         <span style="white-space:pre">      </span>system("cls");  
  85.     <span style="white-space:pre">      </span>}  
  86.     <span style="white-space:pre">      </span>getchar();  
  87.     <span style="white-space:pre">      </span>getchar();  
  88.     <span style="white-space:pre">      </span>return 0;  
  89. <span style="white-space:pre">      </span>}  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值