数据结构-实验9各种排序算法 联系客服

发布时间 : 星期日 文章数据结构-实验9各种排序算法更新完毕开始阅读

{ }

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(jdata[j]) break;

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]; /* 把根元素(剩下元素中最大的那个)放到结尾 ,下一次