无序数组中用 快速排序的分治思想 寻找第k大元素
2024-09-04 01:36:15
#include <stdio.h> int *ga;
int galen;
void print_a(){
for(int i = ; i < galen; i++){
printf("%d ",ga[i]);
}
printf("\n");
} //k = di k da yuan su
int quick_findk(int *a, int len, int k){
if(len <= )
return a[];
int *p,*l,*r,tmp;
p=&a[len-];
l=a;
r=&a[len-];
while(l < p){
printf("len:%d , k:%d\n",len,k);
print_a();
while(*l<*p && l!=p)
l++;
while(*r>*p && r>l)
r--; if(l != r && l < r){
tmp = *l;
(*l) = (*r);
*r = tmp;
}else{
tmp = *p;
(*p) = (*l);
*l = tmp;
print_a();
int index = l - a;
printf("index:%d v:%d\n",index,a[index]);
if(index == len-k){
return *l;
}else if(index < len-k){//in right
return quick_findk(&a[index+],len-index-,k);
}else if(index > len-k){//in left
return quick_findk(a,index,k-(len - index));
}
}
}
} void main(){
int a[] = {,,,,,};
int len = sizeof(a) / sizeof(a[]);
ga = a;
galen = len;
int r = quick_findk(a, len, ); //
printf("%d \n",r);
}
root@ubuntu:~/cdir# gcc quicksort_findk.c -o quicksort_findk.bin -g
root@ubuntu:~/cdir# ./quicksort_findk.bin
len: , k: len: , k: index: v:
len: , k: index: v:
len: , k: index: v:
len: , k: index: v:
最后 = 3
最新文章
- Swift_UI_UIButton
- js使用模板快速填充数据
- Draggabilly – 轻松实现拖放功能(Drag &; Drop)
- linux 相关快捷键
- [BZOJ1789][BZOJ1830][Ahoi2008]Necklace Y型项链
- iOS面试必看,最全梳理
- 基本的git命令
- SQL 四种连接:内连接、左外连接、右外连接、全连接--转载
- GO逆转字符串
- 纯CSS3实现的图片滑块程序 效果非常酷
- Java编程思想非主流知识点
- 用vue官方提供的模板vue-cli搭建一个helloWorld案例
- 子线程导致 Windows 服务停止的情况(Topshelf 结合 Quartz.NET)
- 洛谷P3195 玩具装箱TOY
- Python写日志
- Java并发编程:volatile关键字解析-转
- 深入分析Java的编译原理
- javascript 节点操作拷贝节点cloneNode()
- HTML5的新结构标签
- 3.node的url属性