堆排序c++實現

weixin_43800124發表於2020-10-11
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);
	}
}

參考內容

相關文章