数据结构课程设计排序算法比较 联系客服

发布时间 : 星期四 文章数据结构课程设计排序算法比较更新完毕开始阅读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]=high+1;j--) //插入点后的数据后移 { L.r[j+1]=L.r[j]; } L.r[high+1]=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]0 && L.r[0]

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=pivotkey)

第 12 页 共 20 页