排序算法
狂吃不胖温同学
这个作者很懒,什么都没留下…
展开
-
排序算法之 堆排序
堆排序,平均时间复杂度为O(nlogn),是一种不稳定的排序算法。堆排序利用 堆 这种数据结构来对数组进行排序,堆是一颗完全二叉树在数组中的表示,其任意一个节点的值大于等于它的父节点,但实际上它是一个数组,只是可以当成是一个完全二叉树:假设有一个数组为 -1,1,0,它是从 0 开始编号的,而当它任意一结点的值都大于等于其父节点是,它就是一个堆了,比如 A = {-1,1,0} 或者 B = {-1,1,0}这两个序列,写成完全二叉树为(数组从左至右其实是二叉树的层序遍历):*** -1(0) *原创 2020-07-05 22:30:23 · 227 阅读 · 0 评论 -
排序算法之 快速排序
快速排序 是对冒泡排序的改进算法,其平均复杂度是O(nlogn),是一种不稳定的排序算法,其基本流程如下:原创 2020-07-04 22:08:31 · 369 阅读 · 0 评论 -
排序算法之 归并排序
归并排序,采用分治思想,将已经排好序的两个数组合并成一个有序的数组,时间复杂度是O(nlogn),也是一种稳定的排序算法,其基本流程如下:采用分治的思想,假设有一个局部已经排好序的数组Y = {-4, -1, 1, 2, 5, -3, -2, 0, 3, 4},则可以分成两个组 A = {-4, -1, 1, 2, 5} 和 B = {-3, -2, 0, 3, 4},现需要将他们合并在一起,则只需要用两个下标遍历两个数组,从 A[0], B[0] 开始对比,小的 (A[0])先放入目标数组,然后遍历A原创 2020-07-02 22:30:57 · 222 阅读 · 0 评论 -
排序算法之 希尔排序
希尔排序 是插入排序的一种优化算法,时间复杂度为O(n^3/2),是一种不稳定的排序算法,其基本流程如下:在基本的插入排序中,每次比较完之后将操作数往前移动一个单位,有时候可能得需要移动很多次才能到达指定位置,而希尔排序是每轮移动的间隔是改变的,先将整个数组分成几组,然后按组间距移动,一轮完毕后缩小间距,直到最后间距为1,此时变成了插入排序,不过此时数组已经是大部分有序的情况了,所以用插入排序速度会有所提升(一般取初始间隔为数组长度的一半)开始数组为 :1, -1, 2, 5, -4, 0, -2,原创 2020-07-01 20:58:38 · 646 阅读 · 1 评论 -
排序算法之 选择排序
选择排序 是时间复杂度为O(n^2)的排序算法,它是不稳定的算法,基本想法是每次选择剩余数据中的最值插入,具体流程如下:初始数据为 1, -1, 2, 5, -4, 0, -2, -3, 3, 4(升序排列)第一次选择:从第 1 个位置到最后一个位置找出最小值与第 1 个位置 的数交换得-4, -1, 2, 5, 1, 0, -2, -3, 3, 4 (-4 与 1 交换)接下来从第二个位置开始依次寻找第二次选择:-4, -3, 2, 5, 1, 0, -2, -1, 3, 4原创 2020-06-30 22:10:23 · 92 阅读 · 0 评论 -
排序算法之 冒泡排序
冒泡排序, 顾名思义, 就是像气泡一样排序, 算法复杂度为O(n^2), 主要执行过程如下:初始操作数: 1, -1, 2, 5, -4, 0, -2, -3, 3, 4原创 2020-06-28 22:50:05 · 289 阅读 · 0 评论 -
排序算法之 插入排序
插入排序 时间复杂度为O(n^2),是一个稳定的排序算法其基本流程如下:比较当前数跟它后一个数的大小,如果后一个数更小,则将其移动到第一个比他小的数的后面,或者是最开头(升序)初始操作数: 1, -1, 2, 5, -4, 0, -2, -3, 3, 4 (升序排列)一开始,当前操作数为 1,比较 1 和 -1 的大小发现,后一个数更小,则将 -1 移动到之前第一个比他小的数后面或者最开头,这里显然移动到开头,则:第一轮移动:1, 1, 2, 5, -4, 0, -2, -3, 3, 4原创 2020-06-29 22:05:42 · 131 阅读 · 0 评论