快速排序求第k小的数
快速排序求第k小的数,思想非常简单,就是如果要查找的k比当前下标low小,则只递归左部分,大则递归右部分,相等则递归右部分,当然由于数组下标从0开始,所以应该是k-1,(比如第一大的数数组下标为0),原理就是快速排序是以一个元素为分隔的,如果求第k大的元素,就是求第n-k+1小的元素.
#include <stdio.h> int i,j; void quicksort(int a[],int left,int right,int k) { int i,j,key,low,high; low=left; high=right; key=a[left]; if (left<right) { while(low<high) { while((low<high)&&(a[high]>=key)) high--; a[low]=a[high]; while((low<high)&&(a[low]<=key)) low++; a[high]=a[low]; } a[low]=key; if (low==k-1) printf("%d ",a[low]); else { if (low<k-1) quicksort(a,low+1,right,k); else quicksort(a,left,low-1,k); } } } int main() { int n,k,i,j; int a[1005]; scanf("%d%d",&n,&k);//n代表数组长度,K代表求第k小的数,如果求第k大的数,就是n-k+1大的数 for (i=0;i<n;i++) scanf("%d",&a[i]); quicksort(a,0,n-1,k); return 0; }
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: 查找第k小的数
- 下一篇: njupt(1406-第K小的数)