排序
排序
StudyWinter
持续学习
展开
-
【排序】堆排序
1、堆排序基本介绍(1)堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序;(2)堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆, 注意 : 没有要求结点的左孩子的值和右孩子的值的大小关系;(3)每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆;(4)大顶堆举例说明:我们对堆中的结点按层进行编号,映射到数组中就是下面这个样子:大顶堆特点:arr[原创 2020-10-24 15:51:38 · 368 阅读 · 0 评论 -
【转载】堆排序算法(图解详细流程)
堆排序的时间复杂度O(N*logN),额外空间复杂度O(1),是一个不稳定性的排序目录一 准备知识1.1 大根堆和小根堆二 堆排序基本步骤2.1 构造堆2.2固定最大值再构造堆三 总结四代码一 准备知识堆的结构可以分为大根堆和小根堆,是一个完全二叉树,而堆排序是根据堆的这种数据结构设计的一种排序,下面先来看看什么是大根堆和小根堆1.1 大根堆和小根堆性质:每个结点的值都大于其左孩子和右孩子结点的值,称之为大根堆;每个结点的值都小于其左孩子和右孩子...转载 2020-10-23 20:33:39 · 2274 阅读 · 0 评论 -
【排序】常用排序算法总结和对比
1、常用算法的比较排序算法 平均时间复杂度 最好情况 最坏情况 空间复杂度 排序方式 稳定性 冒泡排序 O(n^2) O(n) O(n^2) O(1) In-place 稳定 选择排序 O(n^2) O(n^2) O(n^2) O(1) In-place 不稳定 插入排序 O(n^2) O(n) O(n^2) O(1) In-place 稳定 希原创 2020-10-12 10:07:08 · 458 阅读 · 0 评论 -
【排序】基数排序
1、基数排序(桶排序)介绍(1)基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort,顾名思义,它是通过键值的各个位的值,将要排序的元素分配至某些“桶”中,达到排序的作用(2)基数排序法是属于稳定性的排序,基数排序法的是效率高的稳定性排序法(3)基数排序(Radix Sort)是桶排序的扩展(4)基数排序是1887年赫尔曼·何乐礼发明的。它是这样实现的:将整数按位数切割成不同的数字,然后按每个位数原创 2020-10-11 22:26:50 · 1851 阅读 · 0 评论 -
【排序】归并排序
1、归并排序介绍归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。2、归并排序思想示意图1-基本思想说明: 可以看到这种结构很像一棵完全二叉树,本文的归并排序我们采用递归去实现(也可采用迭代的方式去实现)。分阶段可以理解为就是递归拆分子序列的过程。3、归并排序思想示意图2原创 2020-10-11 10:45:56 · 313 阅读 · 0 评论 -
【排序】快速排序
1、快速排序法介绍快速排序(Quicksort)是对冒泡排序的一种改进。基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。2、步骤(1)先从数组中取一个基准数,用于作为衡量的标准;(2)分割过程:将比基准数小的数全部放到它的左边,比基准数大的数放到它的右边【升序】;(3)再对左右区间重复分割【用递归】,直到各区间只有一个数。原创 2020-10-09 20:30:14 · 162 阅读 · 0 评论 -
【排序】希尔排序
1、 简单插入排序存在的问题我们看简单的插入排序可能存在的问题。数组 arr = {2,3,4,5,6,1} 这时需要插入的数 1(最小), 这样的过程是:{2,3,4,5,6,6}{2,3,4,5,5,6}{2,3,4,4,5,6}{2,3,3,4,5,6}{2,2,3,4,5,6}{1,2,3,4,5,6}结论: 当需要插入的数是较小的数时,后移的次数明显增多,对效率有影响。2、希尔排序法介绍希尔排序是希尔(Donald Shell)于1959年提出的一种排序原创 2020-10-07 17:24:02 · 247 阅读 · 0 评论 -
【排序】插入排序
1、插入排序法介绍插入式排序属于内部排序法,是对于欲排序的元素以插入的方式找寻该元素的适当位置,以达到排序的目的。2、插入排序法思想插入排序(Insertion Sorting)的基本思想是:把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。3、插入排序思路图4、插入排序法应用实例把101,原创 2020-10-05 16:58:11 · 214 阅读 · 0 评论 -
【排序】选择排序
1、基本介绍选择式排序也属于内部排序法,是从欲排序的数据中,按指定的规则选出某一元素,再依规定交换位置后达到排序的目的。2、选择排序思想选择排序(select sorting)也是一种简单的排序方法。它的基本思想是:第一次从arr[0]~arr[n-1]中选取最小值,与arr[0]交换;第二次从arr[1]~arr[n-1]中选取最小值,与arr[1]交换;第三次从arr[2]~arr[n-1]中选取最小值,与arr[2]交换,…,第i次从arr[i-1]~arr[n-1]中原创 2020-10-05 11:28:21 · 264 阅读 · 0 评论 -
【排序】冒泡排序
1、基本介绍冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就象水底下的气泡一样逐渐向上冒。因为排序的过程中,各元素不断接近自己的位置,如果一趟比较下来没有进行过交换,就说明序列有序,因此要在排序过程中设置一个标志flag判断元素是否进行过交换。从而减少不必要的比较。(这里说的优化,可以在冒泡排序写好后,再进行)。2、演示冒泡过程的例子 【画图理解】原始数组:3, 9原创 2020-10-04 12:07:16 · 577 阅读 · 0 评论 -
【排序】堆排序
#include <stdio.h>#include <stdlib.h>/*堆:具有完全二叉树的性质。每个结点的值都大于或者等于其左右孩子的值,称为大顶堆;每个结点的值都小于或者等于其左右孩子的值,称为小顶堆。堆排序思路:堆排序的基本思想是:将待排序序列构造成一个大顶堆,此时,整个序列的最大值就是堆顶的根节点。将其与末尾元素进行交换,此时末尾就为最大值。然后将剩余n-1个元素重新构造成一个堆,这样会得到n个元素的次小值。如此反复执行,便能得到一个有序序列了1、原创 2020-06-29 09:38:24 · 169 阅读 · 0 评论