发布时间 : 星期四 文章数据结构课程设计排序算法比较更新完毕开始阅读89d04980ba4cf7ec4afe04a1b0717fd5370cb279
数据结构课程设计——排序算法比较
printf(\ printf(\ 随机产生了%d个随机数,它们是:\\n\ for(i=1;i<=N;i++) { printf(\ \ } printf(\ L.length=N; //存储线性表的长度 return OK; }
//输出排序之后的数据
Status PrintfSqlist(int N,Sqlist L) { int i; printf(\数据个数:\输出数据个数 printf(\ printf(\排序后的数据:(从左向右依次增大)\\n\输出数据 for(i=1;i<=N;i++) printf(\ \ printf(\ return OK; }
//*************************************************************** // 直接插入排序
//*************************************************************** Status InsertSort(Sqlist &L) //参考书P265算法10.1 { int i,j; if(L.length==0) { printf(\要排序的数据为空!\ return ERROR; } for(i=2;i<=L.length;i++) { if(L.r[i] 第 9 页 共 20 页 数据结构课程设计——排序算法比较 for(j=i-2;L.r[0] //*************************************************************** // 折半插入排序 //*************************************************************** Status BInsertSort(Sqlist &L) //参考书P267算法10.2 { int i,j,mid,low,high; if(L.length==0) { printf(\要排序的数据为空!\ return ERROR; } for(i=2;i<=L.length;i++) { L.r[0]=L.r[i]; //将L.r[i]暂存在L.r[0] low=1; high=i-1; while(low<=high) //在r[low..high]中折半查找有序插入的位置 { mid=(low+high)/2; if(L.r[0] 第 10 页 共 20 页 数据结构课程设计——排序算法比较 }//for return OK; } /******************************************************************************** 希尔排序 *********************************************************************************/ //参考书P272算法10.4及10.5 /*Status ShellInsert(Sqlist &L,int dk) //希尔插入排序 { int i,j; //前后位置的增量是dk for(i=dk+1;i<=L.length;i++) //r[0]只是暂存单元,不是哨兵, { if(L.r[i] Status ShellSort(Sqlist &L,int dlta[5],int t) //希尔排序 { int i; if(L.length==0) { printf(\要排序的数据为空!\ return ERROR; } for(i=0;i //一趟增量第 11 页 共 20 页 数据结构课程设计——排序算法比较 } return OK; } */ //************************************************************** // 起泡排序 //************************************************************** Status BubbleSort(Sqlist &L) { int i,j,t; if(L.length==0) { printf(\要排序的数据为空!\ return ERROR; } for(i=1;i<=L.length-1;i++) { for(j=1;j<=L.length-i;j++) { if(L.r[j]>L.r[j+1]) //前面的数据>后面数据时 { t=L.r[j+1]; L.r[j+1]=L.r[j]; L.r[j]=t; //将元素交换 } } } return OK; } //**************************************************** // 快速排序 //**************************************************** int Partition(Sqlist &L, int low, int high) //交换顺序表中子表L.r[low..high]的记录,使得枢轴记录到位,并返回其所在位置,此时在它之前(后)的记录均不大于它 { int pivotkey; //记录关键字 L.r[0]=L.r[low]; //用子表的第一个纪录作枢轴纪录 pivotkey=L.r[low]; //用枢轴纪录关键字 while (low 第 12 页 共 20 页