第K小数-快速排序分割函数变体

来源:互联网 发布:apache johnzon 编辑:程序博客网 时间:2024/06/15 19:33

K小数问题陆陆续续碰到过几次,从大三算法分析期末考试,到2013数据结构考研最后一题,第K小数反复出现着,但可能因为自己极懒,这么多年的遇见都没有正儿八经地解决这个问题,其实关于这个问题比较好的解法,老师告诉我们就是利用快速排序里的分割函数,把分割的主元放出来,根据主元的下标,小的往左找,大的往右边找,俨然就是分治法的步骤,今天突然想到了这个问题,急切地想把之解决,于是,想了又想,写了又写,百度了又百度,在自己智慧和别人智慧的结合下,一个菜鸟多年的困扰在几行代码中解决了,代码写的很简单,就只是把partition这个函数改变了一番

K小数简介:顾名思义,就是找出一堆数里面第K个小的数,当然多数情况下,这对数是无序的,比如3,2,1,4,5,6,9,7,8这堆数里,第1小的数为1,第2小的为2,依次类推

话不多说,上传代码

#include<iostream>#include<stdlib.h>using namespace std;void swap(int a[],int b[]){int temp=*a;*a=*b;*b=temp;}int partition_k(int k,int a[],int first,int end){int i=first;int j=end;while(i<j){while(i<j&&a[i]<a[j]) j--;if(i<j){swap(a[i],a[j]);i++;}while(i<j&&a[i]<a[j]) i++;if(i<j){swap(a[i],a[j]);j--;}}//return i;改写部分 if(k==j-first+1) return a[j];else if(k<j-first+1) return partition_k(k,a,first,j-1);else return partition_k(k-(j-first+1),a,j+1,end);}int main(){int a[9]={3,2,1,4,5,6,9,7,8};for(int i=0;i<9;i++)cout<<a[i]<<" ";cout<<endl;cout<<partition_k(7,a,0,9);cout<<endl;}


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 系统通知栏不显示qq图标怎么办 快递号码写错了而且发货了怎么办 包裹遗忘在郑州东站安检口了怎么办 锁书包的锁头钥匙全掉了怎么办 平板电脑恢复出厂设置变英语怎么办 给国外银行汇款账号写错账号怎么办 顺丰快递暴力运输产品坏了怎么办 亚航订机票名字少写一个字母怎么办 如果淘宝付款七天内不发货怎么办 浪琴手表调了一下日期不走了怎么办 收件人号码写错快递柜已签收怎么办 医院名字写错了怎么办保险报销 电脑在使用中出现了英文字慕怎么办 下雨天了怎么办我好想你是什么歌 安卓手机不支持微信运动怎么办 装系统时无法跳过密匙怎么办 在msdn里下的系统没有网怎么办 w7电脑更新后系统没法激活怎么办 手机使用加速器后网速变卡怎么办 奥特曼ol分解了迪迦石像怎么办 左右棋牌游戏兑换总说系统护怎么办 四季海棠扦插以后黄叶卷叶怎么办 竹节海棠浇水多了叶子蔫了怎么办 社保停缴了里面的钱怎么办 王者荣耀英雄释放技能有延迟怎么办 买的桑拿木板颜色太深了怎么办 万一填写了奔跑吧诈骗信息该怎么办 深圳限行时段堵在路上怎么办 开车堵在路上到了限行时间怎么办 兄妹之间都不想照顾母亲我该怎么办 小孩扁体发炎睡觉呼吸声沉重怎么办 客所思pk3老驱动有杂音怎么办 手机打不开解压包密码怎么办 在香港专柜买东西柜员少给货怎么办 恶魔猎手第二神器任务没选择怎么办 电脑放久了开不了机怎么办 你在主持时说错话了怎么办 1、你在主持时说错话了怎么办? 领导让你替他参加重要会议怎么办 在备孕期老公照了片怎么办 和混混打架后被混混纠缠怎么办