Skip to content

Commit bcde0ac

Browse files
committed
寻找第K大的数,采用快排的思想
1 parent d5b692f commit bcde0ac

1 file changed

Lines changed: 79 additions & 0 deletions

File tree

search/FindKthMaxNum.cpp

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
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

Comments
 (0)