码迷,mamicode.com
首页 > 编程语言 > 详细

排序算法

时间:2018-12-16 00:53:25      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:log   多少   额外   数据传输   ali   border   图片   zha   inf   

0、排序算法说明

0.1 排序的定义

对一序列对象根据某个关键字进行排序。
 
0.2 术语说明
  • 稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面;
  • 不稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面;
  • 内排序:所有排序操作都在内存中完成;
  • 外排序:由于数据太大,因此把数据放在磁盘中,而排序通过磁盘和内存的数据传输才能进行;
  • 时间复杂度: 一个算法执行所耗费的时间。
  • 空间复杂度:运行完一个程序所需内存的大小。

0.3 算法总结
技术分享图片

图片名词解释:
  • n: 数据规模
  • k: “桶”的个数
  • In-place: 占用常数内存,不占用额外内存
  • Out-place: 占用额外内存

0.5 算法分类技术分享图片
0.6 比较和非比较的区别

常见的快速排序、归并排序、堆排序、冒泡排序等属于比较排序。
 
在排序的最终结果里,元素之间的次序依赖于它们之间的比较。每个数都必须和其他数进行比较,才能确定自己的位置。

在冒泡排序之类的排序中,问题规模为n,又因为需要比较n次,所以平均时间复杂度为O(n2)。
 
在归并排序、快速排序之类的排序中,问题规模通过分治法消减为logN次,所以时间复杂度平均O(nlogn)。

比较排序的优势是,适用于各种规模的数据,也不在乎数据的分布,都能进行排序。可以说,比较排序适用于一切需要排序的情况。
计数排序、基数排序、桶排序则属于非比较排序。非比较排序是通过确定每个元素之前,应该有多少个元素来排序。

非比较排序只要确定每个元素之前的已有的元素个数即可,所有一次遍历即可解决。算法时间复杂度O(n)。
非比较排序时间复杂度底,但由于非比较排序需要占用空间来确定唯一位置。所以对数据规模和数据分布有一定的要求。

1、冒泡排序(Bubble Sort)

 
1.2 动图演示
技术分享图片

 

 

 

 
 

2、选择排序(Selection Sort)

 

2.2 动图演示技术分享图片


3、插入排序(Insertion Sort)

 

3.2 动图演示技术分享图片

 

 

5、归并排序(Merge Sort)

 

5.2 动图演示技术分享图片

 

6、快速排序(Quick Sort)

 

6.2 动图演示技术分享图片

 

 

8、计数排序(Counting Sort)

 

8.2 动图演示技术分享图片

9、桶排序(Bucket Sort)

9.2 图片演示技术分享图片

技术分享图片

 

10、基数排序(Radix Sort)

10.2 动图演示技术分享图片

排序算法

标签:log   多少   额外   数据传输   ali   border   图片   zha   inf   

原文地址:https://www.cnblogs.com/alan-blog-TsingHua/p/10125491.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!