第K大数(快排思想)
利用快速排序,对QuickSort()进行改进:
void --> int,return的内容如果需要递归,则return QuickSort(),如果找到结果,return arr[left]。
/* ------------------------------------------------- Author: wry date: 2022/3/2 11:14 Description: test ------------------------------------------------- */ #include <bits/stdc++.h> using namespace std; const int MAXN = 1000+10; int arr[MAXN]; int GetLocation(int left,int right) { int random = left + rand()%(right-left+1); swap(arr[left],arr[random]); while (left<right) { while (left<right && arr[left]<arr[right]) { right--; } swap(arr[left],arr[right]); while (left<right && arr[left]<arr[right]) { left++; } swap(arr[left],arr[right]); } return left; } int QuickSort(int left,int right,int k) { while (left<right) { int position = GetLocation(left,right); if (position>k) { return QuickSort(left,position-1,k); } else if (position<k) { return QuickSort(position+1,right,k); } else { return arr[k]; } } } int main() { int n,k; while (cin>>n >> k) { for (int i=0;i<n;i++) { cin >> arr[i]; } cout << QuickSort(0,n-1,k); } return 0; }

浙公网安备 33010602011771号