1+ #include < iostream.h>
2+
3+ void swap (int &a, int &b)
4+ {
5+ int temp = a;
6+ a = b;
7+ b = temp;
8+ }
9+
10+ int Partion (int a[], int l, int r)
11+ {
12+ while (l < r)
13+ {
14+ while (l < r && a[l] < a[r])l++;
15+ if (l < r)
16+ {
17+ swap (a[l], a[r]);
18+ }
19+ while (l < r && a[r] > a[l])r--;
20+ if (l < r)
21+ {
22+ swap (a[l], a[r]);
23+ }
24+ }
25+ return l;
26+ }
27+
28+ void QuickSort (int a[], int l, int r)
29+ {
30+ if (l >= r)
31+ {
32+ return ;
33+ }
34+ int pivot = Partion (a, l, r);
35+ QuickSort (a, l, pivot - 1 );
36+ QuickSort (a, pivot + 1 , r);
37+ }
38+
39+ void Display (int a[], int n)
40+ {
41+ for (int i = 0 ; i < n; i++)
42+ {
43+ cout<<a[i]<<" " ;
44+ }
45+ cout<<endl;
46+ }
47+
48+ int FindKthMaxNum (int a[], int l, int r, int kth)
49+ {
50+ int pivot = Partion (a, l, r);
51+ if (kth < pivot)
52+ {
53+ return FindKthMaxNum (a, l, pivot - 1 , kth);
54+ }
55+ else if (kth == pivot)
56+ {
57+ return pivot;
58+ }
59+ else
60+ {
61+ return FindKthMaxNum (a, pivot+1 , r, kth);
62+ }
63+ }
64+
65+ int main ()
66+ {
67+
68+ int a[10 ] = {0 , 2 , 1 , 3 , 4 , 5 , 6 , 17 , 9 , 8 };
69+ int n = sizeof (a) / sizeof (int );
70+ int kth, index;
71+ // QuickSort(a, 0, n -1);
72+ // cout<<"QuickSort:";
73+ // Display(a, n);
74+
75+ kth = 10 ;
76+ index = FindKthMaxNum (a, 0 , n-1 , kth);// indexΪkth
77+ cout<<" KthMaxNum:" <<a[index-1 ]<<endl;
78+ return 0 ;
79+ }
0 commit comments