zoukankan      html  css  js  c++  java
  • 浅谈经典排序算法

    一、几种经典排序算法的排序过程及时间复杂度

    冒泡排序:时间复杂度O(n²)

    数组中的第一个元素和第二个元素比较,大的放在后边,然后第二个元素再和第三个元素比较,大的放在后面。以此类推。

    选择排序:时间复杂度O(n²):

    0到n-1里找最小值放位置0上;1到n-1里找最小值放位置1上 以此类推。

    插入排序:时间复杂度O(n²)

     一个数和他前边的数比较,如果大于那个数就放在那个数后面,如果比那个数小就一直往前比较,直到比某个数大就放在那个数后面。如果都没有就放在首位置。

    时间复杂度:O(N*logN) : 归并排序,快速排序,堆排序,希尔排序。

    归并排序:4 6 8 1 7 3 5 2   先每个数自己一组

    然后相邻的成为一组: 46 81 73 52 组里边排序 46 18 37 25

    然后相邻的组成为一组: 4618 3725 组里边排序 1468 2357

    然后再相邻的成为一组:14682357 组里边排序 12345678

    快速排序

    随机选中一个数,小于等于它的数放在这个数的左边,大于它的数放在这个数的右边

    接下来对左右两个部分分别的递归的调用快速排序 

    堆排序

    把数组中n个元素建立成大小为n的大根堆,堆顶是整个所有元素的最大值,把堆顶的元素和堆的最后一个位置的元素位置进行交换。然后把最大值脱离出整个堆结构放在数组的最后位置。作为有序部分。

    再把n-1大小的堆进行大根堆的调整,堆顶还是最大元素,再和最后一位数交换,然后脱离。

    脱离出的数就是有序的 最大值们

    希尔排序

    插入排序改良的排序(插入排序步长为1)。希尔排序的步长是从大到小逐渐调整的。

    比如步长为3,那么一个数就和他前面第三个数比较,比他大不动,比他小就继续再和他前面第三个数比较(如果有的话),直到比某个数大留在当前位置为止。

    然后改变步长再比较。最终都会以步长为1的情况结束。

    希尔排序的成败完全取决于步长的选择,步长选择越优时间复杂度越低,步长选择越劣越趋近于O(n²).

    时间复杂度趋于O(N):都不是基于比较的排序算法(思想原型都来自桶排序)。

    缺陷:区间太大的话,准备太多桶,造成大量空间浪费。

    计数排序:

    比如排序几个人的身高:先设置100厘米到300厘米的桶(100,101,102......300)。

    然后把相应身高的人放进桶里。然后从100号桶依次倒出元素。员工被倒出的顺序就是身高的顺序。

    基数排序:

    比如排序几个数:设置0到9号桶。

    先按照个位上的数放入相应桶中,再从0号桶到9号桶依次倒出所有的数。

    再按十位放入;再按百位放入........

    最后倒出来的数就有序了。

    二、其他补充

    空间复杂度:

    O(1):插入排序,选择排序,冒泡排序,堆排序,希尔排序。

    O(logN)~O(N):快速排序。

    O(N):归并排序。

    O(M):计数排序,基数排序。(M是选择桶的数量)

    稳定性:相同值的元素 在经过排序后相对次序保持不变。

    稳定的排序算法:

    冒泡排序,插入排序,归并排序,计数排序,基数排序,桶排序。

    不稳定的排序算法:

    选择排序,快速排序,希尔排序,堆排序。

    工程上的排序:

    1.工程上的排序是综合排序。

    2.数组较小时,使用插入排序。

    3.数组较大时,使用快速排序或其他O(N*logN)的排序。

     

  • 相关阅读:
    AndroidStudio build.gradle 报错
    点九图片的显示内容区域应作何理解
    【Android Studio快捷键】之导入相应包声明(import packages)
    ListView之EmptyView
    Activity 设置切换动画
    android 中 系统日期时间的获取
    解决Activity启动黑屏及设置android:windowIsTranslucent不兼容activity切换动画问题
    android选择图片或拍照图片上传到服务器(包括上传参数)
    Spring 4 官方文档学习(十)数据访问之OXM
    Spring 4 官方文档学习(十)数据访问之ORM
  • 原文地址:https://www.cnblogs.com/CZDblog/p/5551154.html
Copyright © 2011-2022 走看看