数据结构--排序分类、常用八大排序

一、内部排序的一般分类

1、插入排序

  • 直接插入
  •  希尔排序
  •   折半插入
  •  2-路插入
  •  表插入

2、交换排序

  • 冒泡排序
  • 快速排序

3、选择排序

  • 简单选择
  • 树形选择
  •  堆排序

4、归并排序

5、基数排序

二、八大内部排序

1、直接插入排序【稳定】O(n^2)

 (1)核心思想

        将数组中的所有元素依次跟前面已经排好的元素相比较

        如果选择的元素比已排序的元素小,则交换,再和前一个比较,直到全部元素都比较过。    数据结构--排序分类、常用八大排序_第1张图片

(2)关键:找到待排序元素要插入到已排序序列的位置【查找】

   直接插入:一个个往前比和交换

   二分插入:将有序列表进行二分查找,待排的为key,目标序列是已排好的序列

              https://www.bilibili.com/video/BV1Zv411n72E?spm_id_from=333.999.0.0

   

2、希尔排序(缩小增量排序)【不稳定】(O(n^1.3))

    找每条线段首尾两个元素中最小,然后次小的,依次排序

     数据结构--排序分类、常用八大排序_第2张图片

[注]希尔排序算法是直接插入排序算法的一种改进,减少了其复制的次数,速度要快很多

3、冒泡排序【稳定】(O(n^2))

   相邻两个比较大的往后移,每次循环冒出一个大的,直至最后全部冒出

4、快速排序【不稳定】

     每次第一个元素为参照物大的放其后面,小的放其前面

   数据结构--排序分类、常用八大排序_第3张图片

5、简单选择排序【不稳定】(O(n^2))

   每次选择最小的关键字和第一个位置交换

   在剩下的元素中再找最小的,再和第二个位置交换

                              ....

6、堆排序【不稳定】(O(n*log(2,n)))

 (1)一般步骤: 

       数组--->完全二叉树(根左右顺序)---->从最后一个父节点调整成最大堆

(2)完全二叉树特点:

          左=根*2+1

          右=根2+2

         最后一个父节点:(n-2)/2   n是元素个数

(3)堆的分类:

      大顶堆:父节点大于所有孩子及其子树上元素

      小顶堆:父节点小于所有孩子及其子树上元素

  数据结构--排序分类、常用八大排序_第4张图片

7、归并排序【稳定】(O(n*log(2,n)))

  一个序列,两两归并+排序

     第一趟:两个元素比较

    第二趟:四个元素比较

数据结构--排序分类、常用八大排序_第5张图片

8、基数排序【稳定】(O(d(n+r)))  d-位数  n-元素个数 r-基数

  (1)特点: 分配+收集

      分别按照个位、十位、百位、分配    (num/exp)%10   exp=10^0  10^1   10^2

      每次分配之后收集,得到一个序列,再接着分配 

 数据结构--排序分类、常用八大排序_第6张图片

【总结】

数据结构--排序分类、常用八大排序_第7张图片

三、外部排序(了解)

1、多路平衡归并排序(胜者树、败者树)

2、置换选择排序

3、最佳归并树

参考总结:

数据结构常见的八大排序算法(详细整理) - 竹雨听闲 - 博客园

Java零基础自学教程之归并排序_哔哩哔哩_bilibili

《漫画算法 小灰的算法之旅》

什么是外部排序算法

你可能感兴趣的:(计算机基础,数据结构,分类,排序算法)