C++ 堆排序实现
2013-05-11 12:10
169 查看
void HeapAdjust(int a[],int s,int n)//construct heap { int j,t; while(2*s+1<n)//是否存在左子树 { j=2*s+1; if((j+1)<n) { if(a[j]<a[j+1])//左子树小于右子树,则需要比较右子树 j++;//序号增加1,指向右子树 } if(a[s]<a[j])//比较s与j为序号的数据 { t=a[s]; a[s]=a[j]; a[j]=t; s=j;//交换后该节点的子节点的堆结构被破坏,需要向下重新调整成堆 } else//比较左右孩子均大则堆未被破坏,不需要再调整 break; } } void HeapSort(int a[],int n)//堆排序 { int t,i; int j; //建堆过程 for(i=n/2-1;i>=0;i--)//将a[0,n-1]建成大根堆,建堆时从第一个非叶子节点开始判断是否满足堆结构,然后进行调整 HeapAdjust(a,i,n); //将调整好的堆的堆顶元素输出(与末尾元素交换),从根节点开始重新调整整个堆 //重复进行n-1次 for(i=n-1;i>0;i--) { t=a[0];//与第i个记录交换(i后面的记录已经有序),将堆顶的记录输出 a[0]=a[i]; a[i]=t; HeapAdjust(a,0,i);//将a[0]至a[i]重新调整为堆,调整堆时由于之前已经满足堆结构,只有堆顶被破坏,所以从堆顶开始向下调整 } }
相关文章推荐
- C++实现堆排序(更新版)
- c++实现堆排序及运行实例结果
- C++实现堆排序
- 算法之堆排序(最大堆c++实现)
- 堆排序(C++模版技术实现)
- C++ 数据结构 堆排序的实现
- 排序法系列之六---堆排序(C++代码实现)
- c++实现二叉堆及堆排序
- c++实现堆排序及运行实例结果
- c++堆排序实现(heapsort) (算法导论)
- C++实现的堆排序
- 插入排序、冒泡排序、选择排序、希尔排序、快速排序、归并排序、堆排序和LST基数排序——C++实现
- 插入排序、冒泡排序、选择排序、希尔排序、高速排序、归并排序、堆排序和LST基数排序——C++实现
- 堆排序 C++实现
- 堆排序(C++实现)
- 堆排序(C++实现)
- c++实现堆排序及运行实例结果
- 排序算法(2) 堆排序 C++实现
- 用c++实现堆排序
- c++实现简单的建堆、维护堆和堆排序