将数组划分为两部分,一部分比某一值大,一部分比某一值小,在此基础上寻找第k小元素。(C语言实现)
#include <stdio.h> void swap(int m,int n){ int t=m; m=n; n=t; } int sort(int a[],int low,int high){ int p=a[low]; int s=low; int i; for(i=low;i<=high;i++){ if(a[i]<p){ s=s+1; swap(a[s],a[i]); } } swap(a[s],a[low]); return s; } int quicksort(int a[],int low,int high,int k){ if(low>high){ return -1; }else{ int base=sort(a,low,high); if(base+1==k){ return a[base]; }else if(base+1>k){ quicksort(a,low,base-1,k); }else{ quicksort(a,base+1,high,k); } } } int main(void) { int a[]={3, 16, 31, 43, 49, 51, 54, 56, 58, 68, 76, 67, 60, 87, 97}; int rs=quicksort(a,0,14,8); printf("%d\n",rs); return 0; }
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦