1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| class HeapSort { public:
vector<int> sortArray(vector<int>& nums) { int n = nums.size(); for(int i=(n-1)/2; i >= 0; --i){ heapify(nums, i, n); }
int size = n; while(size > 1){ swap(nums, 0, --size); heapify(nums, 0, size); }
return nums; }
void heapInsert(vector<int> &nums, int i){ while(nums[i] > nums[(i-1)/2]){ swap(nums, i, (i-1)/2); i = (i-1)/2; } }
void heapify(vector<int>& arr, int i, int size){ int l = i*2+1; while(l < size){ int winner = (l+1 < size) && (arr[l+1] > arr[l]) ? l+1 : l; winner = (arr[winner] > arr[i]) ? winner : i; if(winner == i) break; swap(arr, winner, i); i = winner; l = i*2+1; } }
void swap(vector<int>& arr, int a, int b){ int tmp = arr[a]; arr[a] = arr[b]; arr[b] = tmp; } };
|