• 五种排序算法整理 二(堆排序,快速排序、插入排序、选择排序、冒泡排序)


    一、快速排序算法步骤:(从小到大排序)

    1. 在数组中选一个基准数(通常为数组第一个);

    2. 将数组中小于基准数的数据移到基准数左边,大于基准数的移到右边;

    3. 对于基准数左、右两边的数组,不断重复以上两个过程,直到每个子集只有一个元素,即为全部有序。

    实例演示

     

    这个算法就是先找一个基准,对着一个[l,r]区间按照基准排过序后(也不算排序,就是大于基准的放右边,小于基准的放左边)。这个时候假设基准在数组中下标为x。这个时候在对[l,x)和(x,r]则两个区间在进行一次这样的排序。一直进行到区间内部只剩下一个元素就截至

    这个时候数组内元素已经排好序了

    二、插入排序

    思路:(以从小到大排序做例子)

    从第二个元素开始,将当前元素插入到前面对应位置,使当前元素i和之前元素形成有序数组。(数组保存元素[0......(n-1)])

    比较规则:

    使得第i个元素和前面已经有序的[0......(i-1)]倒着进行比较(到这就是先和第i-1位元素比较,再比较i-2位元素......依次进行,我们设保存i-1,i-2这些位置的变量为j)

    1、如果v[i]<v[j],v[j+1]=v[j],j--。然后再判断直到j==0

    2、否则跳出循环,v[j+1]=v[i]

    三、选择排序

    从数组中找到最小的元素,和第一个位置的元素互换。 

     从第二个位置开始,找到最小的元素,和第二个位置的元素互换。

     ........

     直到选出array.length-1个较小元素,剩下的最大的元素自动排在最后一位。

     

    四、冒泡排序

    1.原理:比较两个相邻的元素,将值大的元素交换到右边

    2.思路:依次比较相邻的两个数,将比较小的数放在前面,比较大的数放在后面。

        (1)第一次比较:首先比较第一和第二个数,将小数放在前面,将大数放在后面。

        (2)比较第2和第3个数,将小数 放在前面,大数放在后面。

        ......

        (3)如此继续,知道比较到最后的两个数,将小数放在前面,大数放在后面,重复步骤,直至全部排序完成

        (4)在上面一趟比较完成后,最后一个数一定是数组中最大的一个数,所以在比较第二趟的时候,最后一个数是不参加比较的。

        (5)在第二趟比较完成后,倒数第二个数也一定是数组中倒数第二大数,所以在第三趟的比较中,最后两个数是不参与比较的。

        (6)依次类推,每一趟比较次数减少依次

     

    全部排序算法代码见上一篇博客:

    五种排序算法整理 一(堆排序,快速排序、插入排序、选择排序、冒泡排序)

  • 相关阅读:
    ubuntu20.04上实现百度Apollo6.0系统的部署
    matplotlib包图例出现中文乱码问题
    微软官方Silverlight 音频播放器 Jonas修整版(silerlight 2.0版)
    SpringCloud总结1
    Java中文长度计算
    注册退出函数:atexit
    函数参数的一种特殊用法
    new与malloc等的区别
    两种多态
    第一章 1.1.2 因特网提供服务的方式
  • 原文地址:https://www.cnblogs.com/kongbursi-2292702937/p/12177506.html
Copyright © 2020-2023  润新知