只有堆排序过了,感觉还需要优化
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());
}
};
京公网安备 11010502036488号