首页 > 编程语言 >排序算法

排序算法

时间:2024-07-11 11:09:56浏览次数:14  
标签:基准点 分区 元素 交换 算法 冒泡 排序

二分查找:在已排序数组A中,定义左边界l和右边界r,获取中间索引m=floor(l+r)/2,然后将中间索引的值a[m]与待搜索值进行比较,相等则找到,返回中间索引,a[m]>t,右侧全都大于t,m-1设置为右边界重新查找,a[m]<t,m+1设为左边界重新查找。一般奇数二分取中间,偶数二分取中间靠左。一般而言,对于包n含个元素的列表,用二分查找最多需要log以2为底的n次方步,用简单查找最多需要 n 步,例如有128个元素,则计算器中log10(128)/log10(2),整数则为最终结果,小数则舍去小数部分再加一
排序:目标:掌握常见排序算法(快跑,冒泡,选择,插入等)的实现思路,手写冒泡快排的代码,了解各个排序算法的特性如时间复杂度,稳定性。
冒泡排序:
升序:依次比较数组中相邻两元素的大小,若a[j]>a[j+1],则交换两元素,两两都比较一遍称为一轮冒泡,结果是最大的元素排至最后。然后重复直至整个数组有序。(从头开始,两个相邻的开始比较,把大的一直往右边移直到小于相邻右边的,然后再从头开始)。优化方法:每轮冒泡时最后一次交换索引可作为下一轮冒泡的比较次数,如果值为零则表示整个数组有序,直接退出外层循环。
选择排序:
升序:将数组分为两个子集,排序的和未排序的,每一轮从未排序的子集中选出最小的元素放入排序子集,然后重复直至整个数组有序。优化:每一轮可以先找最小的索引,在每轮最后再交换元素。
与冒泡排序相比,二者平均时间复杂度都是O(n2),选择排序一般快于冒泡排序,因为交换次数小,但是集合有序度高的情况下冒泡优于选择,冒泡属于稳定排序算法,选择属于不稳定排序算法,因为选择排序在相同元素多次排序时可能会打乱相同元素原本的顺序
插入排序:
升序:将数组分为两个区域,排序区域和未排序区域,每一轮从未排序区域中取出第一个元素插入到排序区域(需要保证顺序)重复直至有序。优化:待插入元素进行比较时,遇到比自己小的元素,就代表找到了插入位置,无需进行后续比较,插入时可以直接移动元素,而不是交换元素。
与选择排序相比,时间复杂度都是O(n
2),大部分情况下插入优于选择,有序集合插入的时间复杂度为O(n),属于稳定排序算法
希尔排序:先以4为步长进行一个排序,然后2为步长排序,最后以1为步长进行排序,能减小排序次数
快速排序:每一轮排序选择一个基准点(pivot)进行分区,小于基准点的进入一个分区,大于的放入另一个分区,完成分区时基点元素的位置就是其最终位置,然后再子分区重复以上过程,直至子分区元素个数小于等于1,(体现了分而治之的思想divide-and-conquer,d&c)

单边循环快排:lomuto洛穆托分区方案:
1、 选择最右侧元素作为基准点元素
2、 J指针负责找到比基准点小的元素,一旦找到与i交换
3、 I指针维护小于基准点元素的边界,也是每次交换的目标索引
4、 最后基准点与i交换,i即分区位置
双边循环快排:并不完全等价于hoare霍尔分区方案
1、 选择最左元素作为基准点元素
2、 J指针负责从右向左找比基准点小的元素,i指针负责从左向右找比基准点大的元素,一旦找到二者交换,直到i,j相交
3、 最后基准点与i(此时i与j相等)交换,i即为分区位置

标签:基准点,分区,元素,交换,算法,冒泡,排序
From: https://www.cnblogs.com/lm02/p/18295643

相关文章

  • 从传统到智能:安全帽AI检测算法助力工地/矿山/工厂/电力巡检安全监管
    随着科技的快速发展,人工智能(AI)技术已经渗透到我们生活的方方面面,特别是在建筑工地这一对安全要求极高的领域中,AI技术的应用更是显得尤为重要。其中,安全帽AI检测算法以其高效、准确的特性,为工地的安全管理带来了革命性的变革。一、安全帽AI检测算法概述安全帽AI检测算法是一种基......
  • C语言-常用算法-6
    题目:一个球从100米高度自由下落,每次落地后反弹回原来高度的一半;再落下,那么它在第10次落地时,共经过多少米?第十次反弹多高。源代码:#include<stdio.h>intmain(){doubleheight=100,length_total=100;for(inti=0;i<10;i++){height/=2;......
  • C语言-常用算法-5
    题目:如果一个渔夫从2011年1月1日开始每三天打一次鱼,两天晒一次网,编程实现输入2011年1月日后的任意日期,输入该渔夫是在打鱼还是晒网。源代码:#include<stdio.h>intmain(){intmonth_days[12]={31,28,31,30,31,30,31,31,30,31,30,31};intyear,month,day;......
  • 计及需求响应的粒子群算法求解风能、光伏、柴油机、储能容量优化配置(Matlab代码实现)
     ......
  • 算法金 | DL 骚操作扫盲,神经网络设计与选择、参数初始化与优化、学习率调整与正则化、
    大侠幸会,在下全网同名「算法金」0基础转AI上岸,多个算法赛Top「日更万日,让更多人享受智能乐趣」今日216/10000抱个拳,送个礼神经网络设计与选择参数初始化与优化学习率调整与正则化数据预处理与标准化训练过程与监控特定模型技巧其他训练技巧1.神经网络设计......
  • 「字符串」Manacher算法(马拉车)/ LeetCode 05(C++)
    给你一个字符串 s,找到 s 中最长的回文子串。示例1:输入:s="babad"输出:"bab"解释:"aba"同样是符合题意的答案。示例2:输入:s="cbbd"输出:"bb"思路我们回想中心扩散法:某字符处的中心扩散完毕后,其实已经将它身前身后的字符段落都搜索过了,那么如果我们搜索其后的字......
  • 经典算法题目记录
    力扣1001.两数之和(复习)题目给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。......
  • (4-3)Floyd-Warshall算法:Floyd-Warshall算法的应用案例
    4.3 Floyd-Warshall算法的应用案例Floyd-Warshall算法在许多实际应用中都有着广泛的应用,特别是在需要计算图中所有顶点对之间的最短路径时,它是一种非常有效的解决方案。4.3.1  自驾线路规划暑假来临,家庭A决定自驾旅行,计划去四个城市:A、B、C、D,每个城市之间的行车距离如......
  • 【智能算法改进】一种混合多策略改进的麻雀搜索算法
    目录1.算法原理2.改进点3.结果展示4.参考文献5.代码获取1.算法原理【智能算法】麻雀搜索算法(SSA)原理及实现2.改进点精英反向学习策略将精英反向学习策略应用到初始化阶段,通过反向解的生成与精英个体的选择,不仅使算法搜索范围得到扩大,提高了全局搜索的能力......
  • 冒泡排序---qsort函数
    1.一般冒泡排序的方法首先来看一般的冒泡排序的写法,这种方法只能排序整型类型的数据代码如下:voidbubble_sort(intarr[],intsz){ inti=0; for(i=0;i<sz-1;i++) //排序的次数是sz-1次 { intj=0; for(j=0;j<sz-1-i;j++) //每一次排序过......