zoukankan      html  css  js  c++  java
  • 排序算法思路总结

    好久不学算法了,好多东西都忘了,所以回来整理一下原来学过的东西,这里排序都默认以升序为例

    先说3个简单的,时间复杂度为O(n^2)

    1.冒泡排序

    将相邻两个数进行比较,如果后者较小,则交换,这样每次结束后,都能将第i大的数放到正确的位置

    2.选择排序

    第一次在0~n-1的范围内寻找最小值,将其放到0号位置上,

    第二次则在1~n-1的范围内寻找最小值,将其放在1号位置上,

    而后以此类推

    3.插入排序

    第一次将1号位置上的数与0号位置上的数进行比较,若1号位置上的数较小,则交换

    第二次将2号位置上的数先与1号位置上的数进行比较,若其比1号位置上的数小,则交换,之后再与0号位置进行比较,若依旧比较小,则交换

    而后以此类推

    后面讲相对麻烦些的4种算法

    4.归并排序

    这种算法是把数组中的数先看成若干个长度为1的区间,然后对相邻的长度为2的区间进行排序,之后再对长度为4的区间进行排序,之后依次类推

    5.快速排序

    这种算法是在数组中随机选择一个数,将整个数组划分为两个区域,之后对左右两个区域再次进行上述操作,依次递归,最终就能得到排好序的数组

    6.堆排序

    先将数组元素构成一个大根堆

    先将堆顶与堆末进行交换,将放在堆末的元素取出,之后对堆进行大根堆调整

    重复上述过程,直至堆中没有元素,则可得到排好顺序的数组

    7.希尔排序

    希尔排序是一个优化的插入排序,其关键在于步长的选择,以数组长度为8为例,第一次可选择步长为3进行排序

    之后选择步长为2进行排序,再选择步长为1进行排序

  • 相关阅读:
    安卓权威编程指南-笔记(第24章 Looper Handler 和 HandlerThread)
    AndroidImageSlider
    ToolBar的使用
    安卓权威编程指南-笔记(第26章 服务的作用)
    关于两个update语句互相死锁的显现,加深我们对锁的了解 转载
    js 原型和构造方法 转载
    关于distinct 和group by的去重逻辑浅析
    tab 下一个
    当前浏览器版本
    清除li间隔
  • 原文地址:https://www.cnblogs.com/xinzhiyan/p/8372369.html
Copyright © 2011-2022 走看看