您的位置:首页 > 其它

堆排序

2018-02-03 11:47 120 查看

堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。堆分为大根堆和小根堆,是完全二叉树。大根堆的要求是每个节点的值都不大于其父节点的值,即A[PARENT[i]]>= A[i]。在数组的非降序排序中,需要使用的就是大根堆,因为根据大根堆的要求可知,最大的值一定在堆顶。#include <stdlib.h>
#include <stdio.h>
#include <vector>
#define SWAP(x,y,t) t=x;x=y;y=t;
void print(std::vector<int> arr) {
for (int i = 0; i < arr.size(); i++) {
printf("%6d", arr[i]);
}
printf("\n");
}
void heapSort(std::vector<int> arr,int i) {
int tmp;
for(int j=i;j>0;j--){
int rootIndex=(j-2+j%2)>>1;
if(arr[rootIndex]<arr[j]){//将较大值往前迁移
SWAP(arr[rootIndex],arr[j],tmp);
}
}
SWAP(arr[i],arr[0],tmp);//将首位最大值与末尾交换
if(i>0){
heapSort(arr,--i);
}else{
print(arr); //计算结束
}
}
void heapSort(std::vector<int> arr) {
heapSort(arr,arr.size()-1);
}
int main(){
std::vector<int> a = { 2,5,3,0,2,3,0,-1};
heapSort(a);
return 0;
}

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息