您的位置:首页 > 其它

排序算法总结

2016-05-19 21:37 155 查看
先说结论:

随机情况时:快速排序=堆排序=归并排序>希尔排序>插入排序>选择排序>冒泡排序

部分有序时:插入排序=希尔排序>快速排序>堆排序=归并排序>选择排序=冒泡排序

全部逆序时:快速排序=堆排序=归并排序>希尔排序>选择排序>插入排序>冒泡排序

1、选择排序

每次从未排序元素中寻找最(小)大元素进行交换,放在已排好序列的最后。(实际上将从未排序中找到的最大(小)值与未排序第一个值交换)

特点:比较次数多,交换次数少,不稳定。

2、插入排序

每次将新元素插入到已排序元素序列中,将其放在相对正确的位置。(遍历已排序列,比较未排序列值并将其插入已排序列中)

特点:适用于部分有序及元素个数少,稳定。

3、冒泡排序

每次交换相邻位置的元素,循环一轮使最大(小)的元素处于最末的位置。下一轮,次大(小)的元素处于倒数第二个位置。

特点:交换次数多,慢,稳定。

4、希尔排序

将无序序列分组,对每组序列进行插入排序,在对分好的组进行插入排序。

特点:快,数据移动少,分组大小由经验决定,不稳定。

5、快速排序(已知最快的排序方法)

每次取一个值作为基准,将小于该值的元素移动到前面,大于该值的移动到后面(该值处于正确的位置),再对前后两组分别进行快速排序。

特点:极快,数据移动少,不稳定。

6、归并排序

将一个无序的序列分成两个(或两个以上)有序的表,再整体合并成一个有序的表,采用分治法。

特点:快,稳定。

7、桶排序

将待排序的元素全部直接映射到足够大的临时数中

特点:效率O(1),快,元素必须为整数,空间消耗大。

8、堆排序

堆建好之后堆中第0个数据是堆中最小的数据。取出这个数据再执行下堆的删除操作。这样堆中第0个数据又是堆中最小的数据,取出这个数据。

特点:快,不稳定。

9、计数排序

利用数组的随机访问特性,将要排序的数K转换成数组的下标K,该数组中以K为下标的值A[k]代表这个数K的个数。

特点:非常快,空间复杂度比较高。

10、基数排序

先根据序列的个位数的数字来进行分类,将其分到指定的桶中。分类后,我们在从各个桶中,将这些数按照从编号0到编号9的顺序依次将所有数取出来。接下来,可以对十位数、百位数也按照这种方法进行排序,最后就能得到排序完成的序列。

特点:快,适用于已知数组范围,不需要比较关键字的大小,稳定。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: