本文总结目前我接触的几种排序算法,不设计具体的代码,只是写下我理解的它们在做什么
1.排序思想
(1)选择排序
每次通过逐一比较,找出一个最值
(2)冒泡排序
每次通过相邻元素的逐一比较,沉底一个最大元素,或者冒泡一个最小元素。
(3)插入排序
每次通过比较维护一个已排好序的子序列,当这个子序列长度与原序列相等时就排好序了。
(4)归并排序
merge是核心,merge通过移动下标将两个已经排好序的序列排序。
而可以通过不断递归,将序列长度降为1,这样就有若干已排好序的数组,然后对它们不断merge即可。
(5)快速排序
partition是核心。partition可以通过将个元素与某一元素比较,将数组分为两边,从而找到该元素位置。
然后对两边的未排序子序列递归partition即可。当所有元素都找到自己的位置,排序完成。
(6)堆排序
用堆来维护序列,每次都能通过sink或者swim找到最值元素,这样不断对排除了最值元素的子序列递归调用,便能排序。
2.思考
(1)选择排序与堆排序的区别
找到最值元素的复杂度不一样
选择排序逐一比较,找到最值元素复杂度为N次比较,1次交换。
堆排序是最多logN次比较,与logN次交换。