运用快速排序的思想,但是要注意一点:第24行:if(left <= right)
这个地方,只是排序的时候加不加等号都是一样的,但是这道题里一定要加上,要不然会直接跳错误。
还有就是一定不要忘了加&
!!!!
class Solution { public: int findKth(vector<int>& a, int n, int K) { return quickSort(a, 0, n - 1, K); } int partition(vector<int>& arr, int left, int right) { int pivot = arr[left]; while(left < right) { while(left < right && arr[right] <= pivot) right--; swap(arr, left, right); while(left < right && arr[left] >= pivot) left++; swap(arr, left, right); } return left; } int quickSort(vector<int>& arr, int left, int right, int K) { if(left <= right) { int pivot_index = partition(arr, left, right); if(pivot_index + 1 == K) return arr[pivot_index]; else if(pivot_index + 1 > K) return quickSort(arr, left, pivot_index - 1, K); else return quickSort(arr, pivot_index + 1, right, K); } return -1; } void swap(vector<int>& arr, int i, int j) { int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } };