c语言各种排序法详解.docxVIP

  • 0
  • 0
  • 约5.73千字
  • 约 23页
  • 2021-06-27 发布于山东
  • 举报
精品文档 精品文档 PAGE PAGE21 精品文档 PAGE 实用文档 一 插入排序 1.1 直接插入排序 基本思想:每次将一个待排序额记录按其重点码的大小插入到一个已经排好序的有序序列中,直到全部记录排好序。 图解: 代码实现: [cpp] viewplain copy //直接次序排序 2. void InsertSort( int r[], int n) { for(inti=2;in;i++) 标准文案 实用文档 { 6. r[0]=r[i]; // 设置哨兵 7. for(intj=i-1;r[0]r[j];j--) // 寻找插入位置 8. r[j+1]=r[j]; // 记录后移 r[j+1]=r[0]; } for(intk=1;kn;k++) 12. coutr[k] ; 13. cout \n ; 14. } 1.2希尔排序 基本思想是:先将整个待排序记录序列切割成若干个子序列,在在序列内分别进行直接插入排序,待整个序列基本有序时,再对全体记录进行一次直接插入排序。 图解: 代码实现: [cpp] viewplain copy 1. spanstyle= font-size:14px; //希尔排序 2. voidShellSort( intr[], intn) { inti; 标准文案 实用文档 intd; intj; 7. for (d=n/2;d=1;d=d/2) //以增量为d进行直接插入排序 { 9. for (i=d+1;in;i++) { 11. r[0]=r[i]; // 暂存被插入记录 12. for (j=i-d;j0r[0]r[j];j=j-d) 13. r[j+d]=r[j]; // 记录后移d个位置 14. r[j+d]=r[0]; } } for(i=1;in;i++) 18. coutr[i] ; 19. cout \n ; }/span 互换排序 2.1起泡排序 起泡排序是互换排序中最简单的排序方法,其基本思想是: 两两比较相邻记录的重点码, 如果反序则互换,直到没有反序的记录为止。 图解: 标准文案 实用文档 代码实现: [cpp] viewplain copy 1. spanstyle=font-size:14px; //起泡排序 2. voidBubbleSort( intr[], intn) { inttemp; intexchange; intbound; 7. exchange=n-1; // 第一趟起泡排序的范围是 r[0]到 r[n-1] 8. while(exchange) // 仅当上一趟排序有记录互换才进行本趟 排序 { bound=exchange; exchange=0; 12. for (intj=0;jbound;j++) //一趟起泡排序 13. if (r[j]r[j+1]) { 标准文案 实用文档 temp=r[j]; r[j]=r[j+1]; r[j+1]=temp; 18. exchange=j; //记录每一次发生记录互换的位置 } } for(inti=0;in;i++) 22. coutr[i] ; 23. cout \n ; 24. }/span 2.2迅速排序 基本思想:经过一趟排序将要排序的数据切割成独立的两部分,其中一部分的所有数据都比 此外一部分的所有数据都要小, 然后再按此方法对这两部分数据分别进行迅速排序, 整个排 序过程能够递归进行,以此达到整个数据变成有序序列。 图解: 标准文案 实用文档 代码实现: [cpp] viewplain copy //迅速排序一次区分 2. int Partition( int r[], int first, int end) { 4. int i=first; //初始化 5. int j=end; 标准文案 实用文档 inttemp; while(ij) { 10. while (ijr[i]=r[j]) 11. j--; //右侧扫描 12. if(ij) { 14. temp=r[i]; //将较小记录互换到前面 r[i]=r[j]; r[j]=temp; i++; } 19. while (ijr[i]=r[j]) 20. i++; //左侧扫描 21. if(ij) { temp=r[j]; r[j]=r[i]; 25. r[i]=temp; //将较大记录互换到后边 26. j--; } } 29. return i; //i 为轴值记录的最终位置 } //迅速排序 33. void QuickSort( int r[], int first, int end) { if(firstend) 36. { // 递归结束 37. intpivot=Partition(r

文档评论(0)

1亿VIP精品文档

相关文档