排序算法总结 - Go语言中文社区

排序算法总结


排序算法分类:

  • 插入排序,常见的直接插入排序和希尔排序
  • 选择排序,常见的直接选择排序和堆排序
  • 交换排序,常见的冒泡排序和快速排序
  • 归并排序,常见的二路归并排序
  • 基数排序,整型的高效排序

排序集合主要分为两部分:已排有序集合、待排无序集合。

具体的排序算法:

1.插入排序

基本思想:从初始有序的子集合开始,不断地把心的数据元素插入到已排列有序子集合的合适位置上,使子集合中数据元素的个数不断增多,当子集合等于集合时,插入排序算法结束

插入排序

  • 直接插入排序

基本思想:顺序地把排序的数据元素按期关键字值的大小插入到已排/序数据元素集合的适当位置。子集合的数据元素个数从只有一个数据元素开始逐次增大。当子集合大小最终和集合大小相同时排序完毕

  • 希尔排序

基本思想:把待排序的数据元素分成若干个小组,对同一小组内的数据元素用直接插入发排序;小组的个数逐渐缩小;当完成了所有数据元素都在一个组内的排序号,排序过程结束。希尔排序又称做缩小增量排序。

2.选择排序

基本思想:每次从待排序的数据元素集合中选择关键字最小(或最大)的数据元素放到数据元素集合的最前(或最后),数据元素集合不断缩小,当待排序数据元素集合为空时,选择排序结束。

选择排序

  • 直接选择排序

基本思想:从待排序的数据元素集合中选取关键字最小的数据元素并将它与原始数据集合中的第一个数据元素交换位置;然后从不包括第一个位置上的数据元素的集合中选取关键字最小的数据元素并将它与原始数据元素集合中的第二个数据元素交换位置;如此重复,直到数据元素集合中只剩下一个数据元素为止。

  • 堆排序

基本思想:在直接选择排序中,待排序的数据元素集合构成一个线性表结构,要从有n个数据元素的线性表中选择出一个最小的数据元素需要比较n-1次。如果能把待排序的数据元素集合构成一个完全二叉树结构,则每次选择出一个最大(或最小)的数据元素只需要比较完全二叉树的高度次,即large log_2 n次,则排序算法的时间复杂度就是o(large log_2 n)。

3.交换排序

基本思想:利用交换数据元素的位置进行排序的算法。将待排序的集合的元素的大小进行两两比较,发现与排序的集合的大小相反,则对两个元素进行交换,直到没有反序的为止。

交换排序

  • 冒泡排序

基本思想:交换排序中一种简单的排序方法。其思想是对相邻的记录进行两两比较,通过将大(或小)的往一个方向进行交换移动,最终达到有序。

  • 快速排序

基本思想:采用了一种分而治之的策略,是对冒泡排序的一种改进。选取第一个集合的元素为基准,将比基准元素大的移向基准元素的一边,将比基准元素的小的移向另一边。然后分别对左右两个新的待排序区域,重复上述一趟快速排序的过程。直到每个区域只有一个记录为止

快速排序

4.归并排序

基本思想:归并排序算法可以利用递归的思想或者迭代的思想去实现。将多个有序的集合归并为一路有序集合。2路归并排序将一个具有n个待排序记录的序列看成是n个长度为1 的有序序列,然后进行两两归并,得到[n/2]个长度为2 的有序序列,再进行两两归并,得到[n/4]个长度为4 的有序序列,如此重复,直至得到一个长度为n的有序序列为止

归并排序

5.基数排序

基本思想:借助于多关键码的排序思想,采用“分配”和“收集”的方法对单逻辑关键码进行排序。

基数排序

 

动态图形化网站:https://visualgo.net/zh/sorting

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/keenw/article/details/104913430
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2021-06-12 21:09:57
  • 阅读 ( 1112 )
  • 分类:算法

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢