描述
给定一个数组,请你编写一个函数,返回该数组排序后的形式。
示例1
输入:
[5,2,3,1,4]
返回值:
[1,2,3,4,5]
示例2
输入:
[5,1,6,2,5]
返回值:
[1,2,5,5,6]
复制
备注:
数组的长度不大于100000,数组中每个数的绝对值不超过10^9109
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 将给定数组排序
* @param arr int整型vector 待排序的数组
* @return int整型vector
*/
vector<int> MySort(vector<int>& arr) {
// write code here
int length = arr.size();
quickSort(arr, 0, length - 1);
return arr;
}
void quickSort(vector<int>& arr, int left, int right)
{
if(left < right)
{
//分割数据点,找到分割点
int point = partition(arr, left, right);
//递归调用,对左子树进行排序
quickSort(arr, left, point - 1);
//递归调用,对右子树进行排序
quickSort(arr, point + 1, right);
}
}
//分割数组,找到分割点
int partition(vector<int>& arr, int left, int right)
{
int first = arr[left];
while(left < right)
{
while(left < right && arr[right] >= first)
{
right--;
}
swap(arr, left, right);
while(left < right && arr[left] <= first)
{
left++;
}
swap(arr, left, right);
}
return left;
}
void swap(vector<int>& arr, int i, int j)
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
};