数据结构中几种经典排序简介

参考:

https://jingyan.baidu.com/article/fd8044fa79a7265031137aad.html

https://www.cnblogs.com/hokky/p/8529042.html

八大排序:

插入排序类:

1,直接插入排序:

给定的一组记录,将其分为两个序列组,一个为有序序列(按照顺序从小到大或者从大到小),一个为无序序列。

初始时,将记录中的第一个数当成有序序列, 剩下其他所有数都当做是无序序列组中的数据。

然后将无序序列组中的数据插入到有序序列的适当位置。

2,希尔排序:

是插入排序的操作,但是希尔排序并不是把一组记录看成一个整体,而将整个记录分为了若干组记录,然后在对每组记录进行插入排序。

选择排序类:

1,简单选择排序:

先将第一个位值上的数跟之后所有位置上的数依次进行比较,如果第一个位置上的数比第二个位置上的数大,则进行互换,然后继续将第一个位置上的数与第三个位置上的数进行比较,经过一轮的比较后,第一个位值上的数就是所有数中最小的一个,如此往复。

2,堆排序:

分为大顶堆和小顶堆,大顶堆要求节点的元素都要大于其孩子,小顶堆要求节点元素都小于其左右孩子,两者对左右孩子的大小关系不做任何要求。

大堆排序:取出堆的根节点,放在待排序序列最后一位,重复此过程。直至堆中只有1个元素为止。小堆排序反之!

交换排序类:

1,冒泡排序:

  1. 将序列当中的左右元素,依次比较,保证右边的元素始终大于左边的元素;
    ( 第一轮结束后,序列最后一个元素一定是当前序列的最大值;)
  2. 对序列当中剩下的n-1个元素再次执行步骤1。
  3. 对于长度为n的序列,一共需要执行n-1轮比较
    (利用while循环可以减少执行次数)

2,快速排序:

  1. 从序列当中选择一个基准数(pivot)
    在这里我们选择序列当中第一个数作为基准数
  2. 将序列当中的所有数依次遍历,比基准数大的位于其右侧,比基准数小的位于其左侧
  3. 重复步骤1.2,直到所有子集当中只有一个元素为止。

 

归并排序:

参考:https://www.cnblogs.com/chengxiao/p/6194356.html

归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。

分开进行排序,然后再将结果合并到一起!

 

基数排序:

基数排序:通过序列中各个元素的值,对排序的N个元素进行若干趟的“分配”与“收集”来实现排序。
分配:我们将L[i]中的元素取出,首先确定其个位上的数字,根据该数字分配到与之序号相同的桶中
收集:当序列中所有的元素都分配到对应的桶中,再按照顺序依次将桶中的元素收集形成新的一个待排序列L[ ]
对新形成的序列L[]重复执行分配和收集元素中的十位、百位...直到分配完该序列中的最高位,则排序结束

龙哥,给我讲了287 ,386的例子。

第一次是386,6比7小放在第一个桶里。第二次是十位,分配还会按照之前排序进行。第三次就是百位。

百位比较完之后,没有更高位了。排序结束。

OK

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章