voidHeapInsert(vector<int>& arr,int index){while(arr[index]> arr[(index -1)/2]){Swap(arr, index,(index -1)/2);
index =(index -1)/2;}}voidHeapify(vector<int>& arr,int index,int size){int left =2* index +1;while(left < size){int t =(left +1< size && arr[left +1]> arr[left])? left +1: left;
t = arr[index]> arr[t]? index : t;if(t == index)break;Swap(arr, index, t);
index = t;
left =2* index +1;}}voidSort01(vector<int>& arr){//for (int i = 0; i < arr.size(); i++)// HeapInsert(arr, i);for(int i = arr.size()-1; i >=0; i--)Heapify(arr, i, arr.size());int heapSize = arr.size();while(heapSize >0){Swap(arr,0,--heapSize);Heapify(arr,0, heapSize);}}
1.对几乎有序的数组排序
voidTest01(vector<int>& arr,int k){
priority_queue<int, vector<int>, greater<int>> que;int i =0;for(; i <= k; i++)
que.push(arr[i]);int j =0;for(; i < arr.size(); i++, j++){
que.push(arr[i]);
arr[j]= que.top();
que.pop();}while(!que.empty()){
arr[j]= que.top();
que.pop();}}
二.桶排序
1.计数排序
voidSort03(vector<int>& arr,int left,int right){
vector<int>helper(right - left +1,0);int size = arr.size();for(int i =0; i < size; i++)
helper[arr[i]]++;int index =0;for(int i =0; i < helper.size(); i++){if(helper[i]==0)continue;while(helper[i]>0){
arr[index++]= i;
helper[i]--;}}}