快排:选择左端为基准数;将大于基准数的数排在右边,小于的排在左边;要先从基准数的对面开始遍历;遍历过程中交换左右不符合条件的数;最后递归左右子数组。
class Solution {
public:
void quick_sort(vector<int> &arr, int left, int right){
if (left>right) return ;
int temp, p_vote=arr[left], i=left, j=right;
while(i<j)
{
while(j>i && arr[j]>=p_vote){
j--;
}
while (i<j && arr[i]<=p_vote){
i++;
}
if (i<j){
temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
arr[left]=arr[i];
arr[i]=p_vote;
quick_sort(arr, left, i-1);
quick_sort(arr, i+1, right);
}
vector<int> getLeastNumbers(vector<int>& arr, int k) {
quick_sort(arr, 0, arr.size()-1);
int len = arr.size();
for (int i = 1; i <= len - k; i++)
{
arr.pop_back();
}
return arr;
}
};