发布时间 : 星期日 文章数据结构-实验9各种排序算法更新完毕开始阅读e76f6559767f5acfa1c7cd94
{ }
R[j]=R[i]; j--; }
R[i]=temp; }
void main() {
int i,k,n=8;
KeyType a[]={49,38,65,97,76,13,27,49}; RedType R[MAXE]; for (i=0;i printf(\ \for (k=0;k<8;k++) if (k==i) printf(\ //输出每一趟的排序结果 else printf(\ printf(\ QuickSort(R,l,i-1); //对左区间递归排序 QuickSort(R,i+1,h); //对右区间递归排序 } R[i].key=a[i]; printf(\ printf(\初始关键字:\for (k=0;k printf(\ //输出初始关键字序列 printf(\QuickSort(R,0,n-1); printf(\快速排序结果: \for (k=0;k printf(\ //输出初始关键字序列 printf(\ 9.3 //9.3实现堆排序算法 #include void HeapAdjust(int data[],int s,int m) /* 排列成堆的形式 */ { int j,rc; rc=data[s]; /* 保存处理元素 */ for(j=2*s;j<=m;j*=2) /* 处理父亲元素 */ { if(j data[s]=data[j]; /* 父节点比较大的孩子节点大则互换 ,保证父节点比所有子节点都大(父节点存储在前面)*/ s=j; } data[s]=rc; /* 相当于data[j]=rc */ } void DispHeap(int R[],int i,int n) /*以括号表示法输出建立的堆*/ { if (i<=n) cout< /*输出根结点*/ if (2*i<=n || 2*i+1 } } cout<<\if (2*i<=n) DispHeap(R,2*i,n); /*递归调用输出左子树*/ cout<<\if (2*i+1<=n) DispHeap(R,2*i+1,n); /*递归调用输出右子树*/ cout<<\ void Heap_sort(int data[],int long_n) /* 堆排序函数 */ { int i,temp; for(i=long_n/2;i>0;--i) HeapAdjust(data,i,long_n); /* 处理后,data[i]是这个数组后半部分的最大值 */ } cout<<\初始堆:\ DispHeap(data,1,long_n);cout< /*输出初始堆*/ for (i=long_n;i>0;--i) /*进行n-1次循环,完成推排序*/ { cout<<\ 交换\与\输出\ temp=data[1]; /* 把根元素(剩下元素中最大的那个)放到结尾 ,下一次