C++ 归并、快排、堆排序
排序
http://www.nowcoder.com/questionTerminal/2baf799ea0594abd974d37139de27896
只有堆排序过了,感觉还需要优化
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 将给定数组排序 * @param arr int整型vector 待排序的数组 * @return int整型vector */ // int Partition(vector<int> &arr,int left,int right) // { // int temp = arr[left]; // int &i=left,&j=right; // while(i<j) // { // while(i<j&&arr[j]>temp) j--; // arr[i] = arr[j]; // while(i<j&&arr[i]<temp) i++; // arr[j] = arr[i]; // } // arr[i] = temp; // return i; // } // void QuickSort(vector<int> &arr,int left,int right) // { // if(left<right){ // int pivot = Partition(arr, left, right); // QuickSort(arr, left, pivot-1); // QuickSort(arr, pivot+1,right); // } // } void DownSift(vector<int>& arr,int low,int high){ int i=low,j=i*2; while(j<=high) { //int i=low,j=i*2; if(j+1<=high&&arr[j+1]>arr[j]) { j = j+1; } if(arr[j]>arr[i]) { swap(arr[i],arr[j]); i=j; j=i*2; } else break; } } void CreateHeap(vector<int>& arr){ int low=1,high = arr.size(); for(int i=high/2;i>=1;i--) DownSift(arr, i, high-1); } void HeapSort(vector<int>& arr){ int low=1,high = arr.size()-1; while(high){ swap(arr[1],arr[high]); DownSift(arr, 1, --high); } } // void Merge(vector<int>& arr,int l1,int r1,int l2,int r2){ // int index = 0; // int p=l1,q=l2; // vector<int> temp(100000); // while(p<=r1&&q<=r2){ // temp[index++] = arr[p]<arr[q]?arr[p++]:arr[q++]; // } // while(p<=r1) temp[index++] = arr[p++]; // while(q<=r2) temp[index++] = arr[q++]; // for(int i=0;i<index;i++) // arr[l1+i] = temp[i]; // return; // } // void MergeSort(vector<int> &arr,int l,int r) // { // if(l>=r) return; // int mid = (l+r)/2; // MergeSort(arr, l, mid); // MergeSort(arr,mid+1,r); // Merge(arr,l,mid,mid+1,r); // } vector<int> MySort(vector<int>& arr) { // write code here //QuickSort(arr,0,arr.size()-1); arr.insert(arr.begin(),0); CreateHeap(arr); HeapSort(arr); //MergeSort(arr,0,arr.size()-1); return vector<int>(arr.begin()+1,arr.end()); } };