范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

阿包说算法之排序

  排序的方法有很多,本文主要介绍三种:冒泡排序,快速排序,归并排序。在很多算法中,都会用到递归算法,因此递归不再单独讲。1.冒泡排序
  算法思路
  冒泡排序的思想是最符合常人思维的,比如一个数组:3,6,8,2,1。首先选择第一个数3,然后从后面的数开始遍历,如果比数组第一个数 小,就交换位置,否则继续: 比如,第一次比较3和6,3小,继续,3和8比,继续,3和2比,2小,就交换3和2的位置,数组变成2,6,8,3,1,这时数组第一个数 是2,2和1比,1小,交换2和1的位置,变成1,6,8,3,2,此时第一轮遍历结束,可以看到一轮遍历可以把最小的数选出。
  第二次从第2个数开始遍历,与后面的数比较,就是6依次和8,3比,跟3换位置,然后3和2比,又换位置,次轮结束后1,2,8,6,3。继续下一轮,直到遍历结束。可见第一次把最小的数放到第一位,第二次把第二小的数放到第二位,第N次把第N小的数放到第N位。void BubbleSort(int* arr, int counts)  {     int tmp = 0;     for (int i = 0; i < counts-1; i++)     {         for (int j = i+1; j < counts; j++)         {             //如果后面的数比前面的小,就交换位置             if (arr[i] > arr[j])              {                 tmp = arr[i];                 arr[i] = arr[j];                 arr[j] = tmp;             }         }     } }  int main()  {     int arr[] = {7,3,8,2,9,6,0,2,4,7};     BubbleSort(arr, 10);     for (int i = 0 ; i<10; i++)         cout << arr[i];     return 0; }
  最终输出
  0223467789
  说明:冒泡排序的时间复杂度为O(N^2),冒泡排序写法可能不一定是跟上面的一样,但是思想是一致的2.快速排序   算法思路   快速排序法的思想是把数组的第一个数取出来作为分界点,让数组中小于他的数放在他左边,大于他的数放在他右边,比如 53974这组数字,选5为分界点,然后让34在5左边,97在5右边,变成34597 然后,对左右两部分34和97,分别继续重复上面的步骤,直到有序。这里可以看出应该用到递归 。   步骤如下,有一串数字3,6,8,2,7,首先把第一个数3取出来作为分界点,然后从最右边开始找小于3的数,7大于3跳过,继续看2,2小于3,就把2放到3的位置,2的位置空出来【2,6,8,,7】,再从左边开始,6大于3,就把6放到原来2的位置,6的位置空出来【2,,8,6,7】,再从右边8开始,8大于3跳过,下一个,是空了,则此轮结束,把3放到空位【2,3,8,6,7】。   然后对3左右两边的2和8,6,7分别按上面的步骤进行排序,就变成【2,3,6,7,8】void FastSort(int* arr, int counts) { if (counts == 1) return; int num = arr[0]; //取数组的第一个数字作为分界点 int nullPos = 0; //空位在此 int left = 1, right = counts-1; //左右开始的位置 while (true) { //从右边开始找,直到有小于num的, 或者遇到空位就结束 while (right != nullPos && arr[right] >= num) right--; if (right == nullPos) //结束了 break; //否则就是找到了小的 arr[nullPos] = arr[right]; nullPos = right; //再从左边找,左边的得大于num才挪 while (left != nullPos && arr[left] <= num) left++; if (left == nullPos) //结束了 break; arr[nullPos] = arr[left]; //当前值放到空位 nullPos = left; } //跳出了,把num放到空位 arr[nullPos] = num; if (nullPos > 0) //有前半段 FastSort(arr, nullPos); //前半段排序 if (nullPos < counts-1) //有后半段 FastSort(arr+nullPos+1, counts-nullPos-1); //后半段排序 } int main() { int arr[] = {7,3,8,2,9,6,0,2,4,7}; FastSort(arr, 10); for (int i = 0 ; i<10; i++) cout << arr[i]; return 0; }   最终输出   0223467789
  说明:这种排序的方式是一种分治 的思想,把大问题拆分成多个解法一样的小问题,这里是把大数组拆成前后2个解法一样的小数组,分成两部分的分治法又叫二分法,但是跟下面的二分法排序又不一样。   另外,快速排序代码会有多种不同的写法,但是思想是一致的,快速排序中有2个while,在极端情况下(比如数组是有序的,会遍历整个数组)的算法复杂度是O(N^2),一般情况下是O(NlogN),但实际上乱序的情况下,很快就能跳出while,所以被称为快速排序,此排序最实用,请读者牢记。3.归并排序(二分法排序)   算法思路   归并排序思路是:将数组一分为二,再对分出来的2个子数组继续拆分,2分,拆分直到子数组只有一个数字,然后把所有的数字两两组合成有序小数组,最后合成一个完整数组,是典型的二分法,所以又叫做二分法排序   这里的思想是拆分后就变成有序数组(一个数字肯定有序),然后就是对有序数组的合并操作。比如83652,拆分成836,52,继续拆分成8,3,6,5,2。然后8和3组合成38, 38和6组合成368, 52组合成25,。最后把368和25组合成23568。void Merge(int* arr1, int counts1, int* arr2, int counts2, int* merge) { //开始组合 int i=0, j=0, pos=0; //较小的数给tmp,小的指针++,tmp指针++ while (i < counts1 && j < counts2) merge[pos++] = arr1[i] < arr2[j] ? arr1[i++] : arr2[j++]; //跳出,如果某个数组还有,加到tmp后面 while (i < counts1) merge[pos++] = arr1[i++]; while (j < counts2) merge[pos++] = arr2[j++]; } void Sort(int *arr, int counts, int* out) { if (counts == 1) //返回条件 { out[0] = arr[0]; return; } int mid = counts/2; //中点作为拆分点 int* out1 = new int[mid]; int* out2 = new int[counts-mid]; Sort(arr, mid, out1); //左边排序 Sort(arr+mid, counts-mid, out2); //右边排序 Merge(out1, mid, out2, counts-mid, out); //左右合并 delete []out1; delete []out2; } void MergeSort(int *arr, int counts) { int* out = new int[counts]; Sort(arr, counts, out); for (int i=0; i  说明:归并排序用的是二分法,把数组分成2个子数组分别排序,实际上可以用三分法四分法,把数组分成3个子数组,4个子数组等都可以,读者可以自行思考如何使用三分法归并排序。   归并排序的时间复杂度是O(NlogN)

教培界爱马仕精锐教育,要倒了吗?昨天,在过了半年夏天之后,上海终于入秋了。不但气温直降,还下起了小雨。但对于很多人来说,这是入冬,这么冷的天,许多百万以及千万富翁们在中山北路地铁站附近的一栋楼前排起了长队,而且是任泽平你是75后,你生三胎了吗?作为一名成年女性,二胎开放之后被人问,为啥不要二胎,三胎开放之后被人问为啥不要三胎。你说没钱没精力,人家会说你,矫情,要求太高,穷养不要多少钱。是的,没错,大山里生了十个还住茅草屋北大女生雇凶杀前男友,北大没这个人今天有个新闻突然火了。主要是集合的关键词太多,北大女生,雇凶未成年人谋害跳楼前男友,所以理所当然的快速上了热搜以及各家媒体头条。前一段时间渣男频出,不少人女性恐男,这下男人们倒要感睡在肯德基麦当劳里的人就是上海的三和大神今天有人转了个知乎热帖,问如何看待那些在24小时麦当劳肯德基里睡觉的青壮年。打眼一瞧,这不就是麦难民,也有点像2017年前后,现金贷特别兴旺的时候流行的三和大神。从居住条件上,这些只会按脚还不够!2021奥佳华傲胜凯伦诗瑞多四款足疗机大比拼最近加班多,每天回家都超过10点甚至11点了,第二天还要正常9点打卡,忙起来简直要小跑,累得走起路来脚都发飘。这也可以理解,因为人正常走路时,两只脚承担的是我们体重1。5倍的压力。不写作业不考试,不鸡娃就能多生娃吗?最近的政策,对小娃娃都是好消息。首先是校外的学科培训机构都被干倒了,周末和寒暑假不会再被英语班奥数班作文班之类的包围了。家里有条件请一对一的领导也考虑到了,家教也是违规的,会坚决查中国能建与东方电气签订战略合作协议5月29日,中国能源建设集团有限公司与中国东方电气集团有限公司在成都签订战略合作协议。中国能建党委书记董事长宋海良与东方电气党组书记董事长俞培根会谈交流并见证签约。俞培根对宋海良一安兔兔7月安卓入门级到顶级旗舰机比对榜单出炉,Redmi连夺三冠SK数码科技8月13日消息!据安兔兔数据报告,安兔兔7月Android手机性价比对榜单出炉。其中,从入门级机型到顶级旗舰机,一共有5个价位段的,均已概括。01999元价位段第一名R新款iPhone13将搭载A15Bionic芯片!曝iPadPro2022概念设计图SK数码科技8月14日消息!来自市场研究机构的最新报告显示,iPhone13的一些值得注意的硬件升级将包括更快更节能的5nm芯片。其可能被命名为A15Bionic芯片,并表示,如果全新MIUI12。5增强版首轮推送更新升级,你升级体验了吗?SK数码科技8月10日,小米秋季发布会正式上新了时隔三年的小米MIX4,小米平板5系列。与此同时,发布会上也给米粉们带来了全新的MIUI12。5增强版(Enhanced)优化点汇总小米MIX4平板系列比对荣耀magic3平板系列,你怎么选?小米平板5Pro高配版终端体验SK数码科技今天,我们来闲聊一下8月份新出的四款产品。首先是小米平板5Pro基本配置参数。小米平板5共有三款机型版本,其中Pro位居高配版。小米平板5
在国家重点研发计划立项中山西农业大学获重大突破近日,国家科技计划管理信息服务平台公布了一批国家重点研发计划项目,山西农业大学牵头申报的2项国家重点研发计划部省联动项目获批立项,国拨经费达1。045亿元。近年来,山西农业大学聚焦NWC大会OPPO发布最新技术,240W闪充领跑行业视频加载中2022年2月28日,在刚刚结束的NWC,在巴塞罗那,OPPO240W充电技术,惊艳亮相。在快充这个赛道上,OPPO自2014年开始,就花重金在闪充技术上不断突破,15WMWC刚开幕,高通就放出了无线技术的大招说到高通,可能许多朋友首先会想到骁龙移动平台,或是近年来高通在智能手机行业的统治地位。经常关注我们三易生活的朋友可能还记得,高通之所以能够长期在智能手机市场占据C位,很大一部分原因工信部抓紧明确新能源汽车车购税优惠延续等支持政策抓紧研究明确新能源汽车车购税优惠延续等支持政策。2月28日,工业和信息化部副部长辛国斌在国新办召开的新闻发布会上指出。目前,国内新能源汽车市场除了享受新能源推广补贴之外,还享受免征工信部抓紧研究明确新能源车购税优惠延续等政策28日,国新办就促进工业和信息化平稳运行和提质升级有关情况举行发布会,工信部副部长辛国斌表示,抓紧研究明确新能源汽车车购税优惠延续等支持政策,优化双积分管理办法,做好与补贴退坡的有被捧上神坛的苹果,真的有那么强大吗?国人都醒醒吧,在俄罗斯美国已经当做武器运用了,西方对俄罗斯金融制裁苹果就关闭了俄罗斯区域内支付功能而且还没有提前通知,细思极恐啊!如果你身在外地没带现金没带卡只带了一部苹果手机就算2022电商淘宝天猫合体变局之详尽分析淘宝天猫融合之变化(戴珊)坚持(淘宝天猫)双品牌运营基础上,新设3大中心并在总部后台实现全面融合1产业运营中心(商家商品)2平台策略中心(规则工具)3用户运营中心(消费端体验)同时优控智行与黑芝麻智能达成战略合作,共同发展高端大算力域控日前,优控智行21日发布消息称,公司近日与黑芝麻智能达成战略合作,双方立足于打造符合高阶无人驾驶系统应用需求的高端大算力智能驾驶计算平台,面向国内乘用车限定场景无人运营等领域提供域iPhone14真要用挖孔屏了,这样真的好看吗?iPhone14设计图曝光根据之前的消息来看,今年iPhone14将彻底抛弃刘海设计,转而使用打孔屏幕,并且还有很多渲染图表示了新的挖孔屏样式。而在近日,据供应链消息曝光,京东方已i712700H和R76800H,这两个CPU差距有多大?这个问题其实说白了就是取决于你要性能还是要便宜。今年的12代因特尔酷睿提升明显,12代I5都能轻松打上一代I7级别的产品,天选3上边的这块移动端的I712700H,性能相当可观VR程序员比语言,就像两个傻蛋在比智商经常在各类平台上看到比较编程语言的骂战,无非是我用什么,什么就好,大厂用什么什么就好,但是你较真让他说出个子丑寅卯出来,他也就消停了。开发语言,尤其是高级开发语言,比如javapy