首页 > 编程语言 >十大排序算法总结更新

十大排序算法总结更新

时间:2022-10-06 22:13:17浏览次数:71  
标签:总结 Comparable 元素 交换 冒泡排序 算法 排序

目录

十大排序算法总结

一、冒泡排序

  1. 身世曰:冒泡排序可以誉为程序员跨入算法门槛的第一步,相信大家一定被冒泡排序一直萦绕在耳边。【且听冒泡吟】,冒泡乃排序家族之太上长老,掌门人不为过之。
  2. 闻之也:冒泡排序(Bubble Sort),乃计算机科学领域排序算法的简简易者。
  3. 知其身:它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行,直到没有相邻元素需要交换,也就是说该元素列已经排序完成。【百度百科】
  4. 名由来:这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。【百度百科】

附实录

/*
 * 对数组a中的元素排序,改良时间复杂度,空间换时间,冗余flag变量
 */
public static void bubbleSort(Integer[] a) {
    for (int i = 0; i < a.length - 1; i++) {           // 外层循环,负责控制比较趟数
        // 标志位,记录本趟循环是否进行了交换(即是否整体已经有序)
        boolean flag = false;                
        for (int j = 0; j < a.length - 1 - i; j++) {   // 内层循环,比较为冒泡的数
            if (greater(a[j], a[j + 1])) {
                exch(a, j, j + 1);
                flag = true;                           // 记录已经交换过 
            }
        }
        if (!flag) break;                              // 本趟未交换,已经有序退出外层循环
    }
}

知论之

  • 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
  • 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
  • 针对所有的元素重复以上的步骤,除了最后一个。
  • 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

赞曰

  • 时间复杂度
    • 最优:O(n) ,若待排序序列和期望序列顺序一致,则只许挨着扫描
    • 最坏:O(n^2)

二、选择排序

  1. 身世曰:冒泡排序可以誉为程序员跨入算法门槛的第一步,相信大家一定被冒泡排序一直萦绕在耳边。【且听冒泡吟】,冒泡乃排序家族之太上长老,掌门人不为过之。
  2. 闻之也:冒泡排序(Bubble Sort),乃计算机科学领域排序算法的简简易者。
  3. 知其身:它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行,直到没有相邻元素需要交换,也就是说该元素列已经排序完成。【百度百科】
  4. 名由来:这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。【百度百科】

附实录

附录

具者类也:排序算法公用(交换和比较)

    
    public static class CommonSortUtils {

        /*
         数组元素 i 和 j 交换位置方法
         * */
        public static void exch(Comparable[] a, int i, int j) {
            Comparable temp;
            temp = a[i];
            a[i] = a[j];
            a[j] = temp;
        }

        /*
         * 比较是否a > b的方法
         * */
        public static boolean greater(Comparable a, Comparable b) {
            return a.compareTo(b) > 0;
        }

        /*
         * 比较是否a < b的方法
         * */
        public static boolean less(Comparable a, Comparable b) {
            return b.compareTo(a) > 0;
        }

    }

标签:总结,Comparable,元素,交换,冒泡排序,算法,排序
From: https://www.cnblogs.com/malongfeistudy/p/16758642.html

相关文章

  • ​排序子序列​​
    牛牛定义排序子序列为一个数组中一段连续的子序列,并且这段子序列是非递增或者非递减排序的。牛牛有一个长度为n的整数数组A,他现在有一个任务是把数组A分为若干段排序子序......
  • 多种PID算法用C语言来实现
    原文链接:https://blog.csdn.net/Nirvana_Tai/article/details/105409311,随后整理验证,再补充(一)前言  PID算法在工业应用中随处可见。大学期间,想做各类科创也少不了PI......
  • 10.6 模拟赛总结
    10.6模拟赛总结T1光大意:给定四个方块的需要的亮度值,有光的散射,每个方块对于另外三个有影响,问四个亮度值之和最小为多少。$n\le1500$思路:一眼看出是二分答案的判定性......
  • 2022.10.06考试总结
    2022.10.06考试总结得分:\(175/300\)总结:今天考试的题目非常有区分度,第一题因为没有发现结论,导致最后只拿到了部分分,第二题是一道比较简单的背包,第三题的题目意思描述的......
  • 本周总结
    本周总结数据类型整型int一.类型转换int(其他数据类型)二.进制转换bin二进制oct八进制hex十六进制其他转十进制可以直接int三.python自身对数字敏感度低(精确度低......
  • 「牛客网」45道JS能力测评经典题总结
    前言牛客网的45道JS能力评测题个人觉得是非常好的45道js基础检测题,基本就是对自己的JavaScript基础做一个比较全面的评估,包括if语句、循环体、基础操作符、setInterval、s......
  • C语言下for循环的一点技巧总结
    for循环是普遍应用与各种计算机语言的一种循环方式。一般情况下,for循环规则:for(条件一;条件二;条件三)条件一为满足条件,也就是条件一为1时,进入这个for循环。条件二为循环......
  • 第二组chap1-2学习总结
      在两周C语言的学习课程中,让我们从认识C语言历史到开始动手打代码,从最初对C语言的懵懵懂懂到小有成就,我们对C语言的认识和运用也越来越深。充实着我们的不仅仅是学习......
  • 三大排序
    冒泡排序publicclassMain{publicstaticvoidmain(String[]args){int[]arr={10,8,3,14,85,21,2,19,221,100};test(arr);......
  • 2022.9.30 Java第四次课后总结
    1.publicclassBoxAndUnbox{ /** *@paramargs */ publicstaticvoidmain(String[]args){ intvalue=100; Integerobj=value;//装箱 intresult=obj*2;......