void heapSort(vector<int>& arr, int n){
//初始化堆,使其形成大顶堆
for(int i = n / 2 - 1; i >= 0; i--){
adjust(arr, n, i);
}
for(int i = n - 1; i >= 0; i--){
int temp = arr[i];
arr[i] = arr[0];
arr[0] = temp;
adjust(arr, i, 0);
}
}
void adjust(vector<int>& arr, int n, int i){
int min = i;
int l = 2 * i + 1;
int r = 2 * i + 2;
if(l < n && arr[l] < arr[min]){
min = l;
}
if(r < n && arr[r] < arr[min]){
min = r;
}
if(min != i){
int temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
adjust(arr, n, min);
}
}
堆排序c++实现
最新推荐文章于 2022-10-22 17:45:11 发布