排序算法总结

先说结论:

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

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

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


1、选择排序
每次从未排序元素中寻找最(小)大元素进行交换,放在已排好序列的最后。(实际上将从未排序中找到的最大(小)值与未排序第一个值交换)
特点:比较次数多,交换次数少,不稳定。


2、插入排序
每次将新元素插入到已排序元素序列中,将其放在相对正确的位置。(遍历已排序列,比较未排序列值并将其插入已排序列中)
特点:适用于部分有序及元素个数少,稳定。


3、冒泡排序
每次交换相邻位置的元素,循环一轮使最大(小)的元素处于最末的位置。下一轮,次大(小)的元素处于倒数第二个位置。
特点:交换次数多,慢,稳定。


4、希尔排序
将无序序列分组,对每组序列进行插入排序,在对分好的组进行插入排序。
特点:快,数据移动少,分组大小由经验决定,不稳定。


5、快速排序(已知最快的排序方法)
每次取一个值作为基准,将小于该值的元素移动到前面,大于该值的移动到后面(该值处于正确的位置),再对前后两组分别进行快速排序。
特点:极快,数据移动少,不稳定。


6、归并排序
将一个无序的序列分成两个(或两个以上)有序的表,再整体合并成一个有序的表,采用分治法。
特点:快,稳定。


7、桶排序
将待排序的元素全部直接映射到足够大的临时数中
特点:效率O(1),快,元素必须为整数,空间消耗大。


8、堆排序
堆建好之后堆中第0个数据是堆中最小的数据。取出这个数据再执行下堆的删除操作。这样堆中第0个数据又是堆中最小的数据,取出这个数据。
特点:快,不稳定。


9、计数排序
利用数组的随机访问特性,将要排序的数K转换成数组的下标K,该数组中以K为下标的值A[k]代表这个数K的个数。
特点:非常快,空间复杂度比较高。


10、基数排序
先根据序列的个位数的数字来进行分类,将其分到指定的桶中。分类后,我们在从各个桶中,将这些数按照从编号0到编号9的顺序依次将所有数取出来。接下来,可以对十位数、百位数也按照这种方法进行排序,最后就能得到排序完成的序列。
特点:快,适用于已知数组范围,不需要比较关键字的大小,稳定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值