求第K大数程序代码

求第K大数程序代码

——————————————————————

1 #include "stdio.h"
2 #include "stdlib.h"
3 #include "string.h"
4
5  int partition(int a[], int left, int right);
6
7  void main()
8 {
9 int a[10]={3,4,18,6,1,2,22,45,67,11};
10 int kmax;
11 int i;
12 int left=0,right=9;
13
14 printf("input k(1->9):");
15 scanf("%d",&kmax);
16 if(kmax<1 || kmax>9) return;
17 kmax--;
18 while(1)
19 {
20 i=partition(a,left,right);
21 if(i==kmax) break;
22 else if(i>kmax)
23 {
24 right=i-1;
25 }
26 else if(i<kmax)
27 {
28 left=i+1;
29 }
30 }
31 printf("K max is:%d\n",a[i]);
32 }
33
34 int partition(int a[], int left, int right)
35 {
36 int i=left,j=right;
37 int pivot=a[left];
38
39 while(i!=j)
40 {
41 while(i<j && a[j]<pivot) j--;
42 if(i<j) a[i++]=a[j];
43 while(i<j && a[i]>pivot) i++;
44 if(i<j) a[j--]=a[i];
45 }
46
47 a[i]=pivot;
48 return i;
49 }

——————————————————

程序运行:

posted @ 2011-03-24 23:54  Watson.Long  阅读(364)  评论(0编辑  收藏  举报