问题描述:
Find the kth largest element in an unsorted array. Note that it is the kth largest element in the sorted order, not the kth distinct element.
For example,
Given [3,2,1,5,6,4]
and k = 2, return 5.
Note:
You may assume k is always valid, 1 ≤ k ≤ array's length.
解题思路:
从该题可以看出,我们要找到第k大的元素的话,首先需要进行排序,而后,直接arr[N-k]就可以直接找到第k大的元素了。
#include"stdio.h"
#include"stdlib.h"
#define N 10
#include"stdlib.h"
#define N 10
int partition(int arr[],int low,int high){
int key;
key=arr[low];
while(low<high){
while(low<high&&arr[high]>=key)
high--;
if(low<high)
arr[low++]=arr[high];
while(low<high&&arr[low]<=key)
low++;
if(low<high)
arr[high--]=arr[low];
}
arr[low]=key;
return low;
}
int key;
key=arr[low];
while(low<high){
while(low<high&&arr[high]>=key)
high--;
if(low<high)
arr[low++]=arr[high];
while(low<high&&arr[low]<=key)
low++;
if(low<high)
arr[high--]=arr[low];
}
arr[low]=key;
return low;
}
void quick_sort(int arr[],int start,int end){
int pos;
if(start<end){
pos=partition(arr,start,end);
quick_sort(arr,start,pos-1);
quick_sort(arr,pos+1,end);
}
return;
}
int pos;
if(start<end){
pos=partition(arr,start,end);
quick_sort(arr,start,pos-1);
quick_sort(arr,pos+1,end);
}
return;
}
int main(void){
int i,k;
printf("请输入第k个大元素的k值:");
scanf("%d",&k);
int arr[N]={32,12,7,8,23,45,79,10,17,20};
printf("排序前\n");
for(i=0;i<N;i++)
printf("%d\t",arr[i]);
quick_sort(arr,0,N-1);
int i,k;
printf("请输入第k个大元素的k值:");
scanf("%d",&k);
int arr[N]={32,12,7,8,23,45,79,10,17,20};
printf("排序前\n");
for(i=0;i<N;i++)
printf("%d\t",arr[i]);
quick_sort(arr,0,N-1);
printf("第k大的元素是:%d\n",arr[N-k]);
system("pause");
return 0;
}
return 0;
}