发布时间 : 星期一 文章数据结构实验四题目一排序实验报告更新完毕开始阅读
{ {
if(r[i] r[0]=r[i]; move ++; r[i]=r[i-1]; move ++; int j; for(j=i-2;r[0] compare++; move ++; r[j+1]=r[j]; } ++compare; r[j+1]=r[0]; } ++compare; } for(int i=1;i<=n;i++) cout< void LED::ShellInsert(int r[],int n) //希尔排序 {compare = 0; move = 0; for(int d=n/2;d>=1;d=d/2) { for(int i=d+1;i<=n;i++) { if(r[i] move++; r[0]=r[i]; int j; for(j=i-d;j>0&&r[0] { move++; } compare++; r[j+d]=r[j]; cout<<\比较次数为\< for(int i=2;i<=n;i++) r[j+d]=r[0]; } move++; compare++; } } void LED::BubbleSort(int r[],int n) //冒泡排序改进 { } int LED::Partion(int r[] ,int first ,int end ) { int i = first ; //分区的左界 int j = end; //分区的右界 int pivot = r[i]; //保存第一个元素,作为基准元素 while(i < j) { while((i { j -- ; Cnum++; compare = 0; move = 0; int pos = n ; while(pos != 0) { } for(int i=1;i<=n;i++) cout<<\比较次数为\< int bound = pos; pos = 0; for(int i =1;i compare ++; if(r[i]>r[i+1]) { } r[0] = r[i]; r[i] = r[i+1]; r[i+1] = r[0]; //交换 pos = i; move=move+3; } for(int i=1;i<=n;i++) cout<<\比较次数为\< cout< cout< } } r[i] = r[j] ; while((i r[j] = r[i]; { i ++; Cnum++; r[i] = pivot ; //将轴值移动到i=j的位置 return i; //返回分区的分界值i void LED::Qsort(int r[],int i,int j) { } } void LED::SelectSort(int r[],int n) //简单选择排序 { compare = 0; move = 0; for(int i =1 ; i for(int i=1;i<=n;i++) cout<<\比较次数为\< int index = i; //查找最小记录的位置index for(int j = i + 1;j<=n;j++) { } if(index != i) //若第一就是最小元素,则不用交换 { } r[0] = r[i]; r[i] = r[index]; r[index] = r[0]; //利用r[0],作为临时空间交换记录 move+=3; compare++; if(r[j] if(i < j) { Mnum ++; } else { int pivotloc = Partion(r,i,j); Qsort (r,i,pivotloc -1); //左分区快速排序 Qsort (r,pivotloc +1,j); // 右分区快速排序 index = j; cout< } /* void LED::Sift(int r[],int k , int m) { } void LED::HeapSort (int r[],int n) { } void LED::Merge(int r[],int r1[],int s,int m,int t) { } void LED::MergePass(int r[],int r1[],int n ,int h) { int i=s; int j = m + 1; int k = s ; while(i<=m&&j<=t) { } while(i<=m) r1[k++] = r[i++]; r1[k++] = r[j++]; while(j<=t) if(r[i] r1[k++] = r[j++]; for(int i = n/2; i >= 1 ; i--) //建堆 Sift(r,i,n); for(int i = n;i>1;i--) //堆排序 {r[0] = r[1]; r[1] = r[i];r[i]= r[0]; //输出堆顶元素 Sift(r,1,i-1); //重建堆 } int i = k, j = 2*i; while(j<=m) { } if(j r[0] = r[i]; r[i] = r[j]; r[j] = r[0]; i = j ; j = 2* i;