C语言实现TOP K算法系列之快速排序实现
来源:互联网 发布:淘宝货到付款买家拒签 编辑:程序博客网 时间:2024/05/20 21:59
TOP K算法的实现有很多种方式,其中类似于快排的实现是非常棒的,堆的实现也是非常好的,其中就是关于快排的实现会得到一个TOP K的集合,而这个集合不一定保证里面的数据都是有序的。
下面就献上TOP K算法的quicksort版本:
#include <stdio.h>#include <stdlib.h>#include <time.h>void partition(int a[],int s,int t,int *k) //这种partion是划分成了两个区域,左侧都大于,右侧都小于{ int i,j,x; x=a[s]; //取划分元素 i=s; //扫描指针初值 j=t; do { while((a[j]<x)&&i<j) j--; //从右向左扫描,如果是比划分元素小,则不动 if(i<j) a[i++]=a[j]; //大元素向左边移 while((a[i]>=x)&&i<j) i++; //从左向右扫描,如果是比划分元素大,则不动 if(i<j) a[j--]=a[i]; //小元素向右边移 } while(i<j); //直到指针i与j相等 a[i]=x; //划分元素就位 *k=i;}/*查找数组前K个最大的元素,index:返回数组中最大元素中第K个元素的下标(从0开始编号),high为数组最大下标*/int FindKMax(int a[],int low,int high,int k){ int q; int *temp; int index=-1; if(low < high) { temp = &q; partition(a, low, high,temp); int len = q - low + 1; //表示第几个位置 if(len == k) index=q; //返回第k个位置 else if(len < k) index= FindKMax(a, q + 1, high, k-len); else index=FindKMax(a, low, q - 1, k); } return index;}int main(){ int a[]= {20,100,4,2,87,9,8,5,46,26}; int Len=sizeof(a)/sizeof(int); int K=5; //这个K就是TOP K里面的K FindKMax(a, 0, Len- 1, K) ; //传进去的是a的指针,所以改了就是改了 for(int i = 0 ; i < K ; i++) // cout<<a[i]<<" "; printf("%d ",a[i]); return 0;}
使用截图
阅读全文
0 0
- C语言实现TOP K算法系列之快速排序实现
- 【算法总结系列-1】快速排序-c语言实现
- 算法学习之快速排序的C语言实现
- 快速排序C语言算法实现
- c语言实现快速排序算法
- 快速排序算法的c语言实现
- 快速排序算法的C语言实现
- 算法导论C语言实现: 快速排序
- 快速排序算法 C语言实现
- 直白快速排序算法,C语言实现
- C语言快速排序算法实现
- 【算法】C语言实现的快速排序
- C语言实现数组快速排序算法
- C语言---快速排序算法实现
- 快速排序算法的C语言实现
- C语言实现快速排序算法
- 用C语言实现快速排序算法
- 用C语言实现快速排序算法
- PAT 甲级1021. Deepest Root (25)
- 开机自启动
- 今年美国数据中心投资规模超182亿美元 超前三年总和
- 机房承重标准及承重计算方法
- 理解Docker镜像、容器、仓库的概念
- C语言实现TOP K算法系列之快速排序实现
- Android城市列表,首字母排序,右侧点击字母定位
- IIS SSL客户端证书(忽略/接受/必须)之一——服务器证书申请
- Linux查看物理CPU个数、核数、逻辑CPU个数
- IIS SSL客户端证书(忽略/接受/必须)之二——客户端证书申请
- SVN版本控制
- mysql查询结果导出到文件
- 北大acm1008
- 对话 | 阿里CTO: “阿里AI芯”很快推出 不做一块钱中标这种事