数据结构实验四题目一排序实验报告 联系客服

发布时间 : 星期六 文章数据结构实验四题目一排序实验报告更新完毕开始阅读

{ {

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=pivot)) //右侧扫描,寻找

{

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((ipivot的元素后移 }

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[j])break; else { }

r[0] = r[i]; r[i] = r[j]; r[j] = r[0]; i = j ; j = 2* i;