堆排序
2017-09-24 17:19
120 查看
#include<iostream> using namespace std; //升序建立最大堆;降序建立最小堆 void heapadjust(int arr[], int start, int end) { int tmp = arr[start]; //根结点从0开始,所以i结点的左右孩子结点的下标为2i+1和2i+2 for (int i = 2 * start + 1; i <= end; i = 2 * i) { if (i < end&&arr[i] < arr[i + 1]) i++; if (arr[start] > arr[i]) break; else { arr[start] = arr[i]; start = i; } } arr[start] = tmp; } /* void heapadjust(int arr[], int pos, int len) { int tmp,child; //根结点从0开始,所以i结点的左右孩子结点的下标为2i+1和2i+2 for (temp=arr[pos];2*pos+1<=len;pos=child) { child=2*pos+1; if (child < end&&arr[child] < arr[child + 1]){ child++; } if (arr[pos] < arr[child]) arr[pos] = arr[child]; else break; } arr[pos] = tmp; } */ void heapsort(int arr[], int len) { for (int i = len / 2-1; i >= 0; i--) { heapadjust(arr, i, len-1); } for (int i = len - 1; i >= 0; i--) { int tmp = arr[i]; arr[i] = arr[0]; arr[0] = tmp; heapadjust(arr, 0, i - 1); } } int main() { int arr[] = { 5,4,9,8,7,6,0,1,3,2 }; int len = sizeof(arr) / sizeof(arr[0]); heapsort(arr, len); for (int i = 0; i < len; i++) { cout << arr[i] << ' '; } cout << endl; system("pause"); return 0; }