几种常见的排序算法原理及时空复杂度

来源:互联网 发布:三网合一建站系统源码 编辑:程序博客网 时间:2024/05/17 02:33

排序算法分为两大类:简单排序算法和高级排序算法假设一下元素都有n个

《1》常见的简单排序算法

(1)冒泡法:从最后一个元素开始依次和前面的元素比较;最后一个和前面所有的比较完后,倒数第二个再和前面的比较

最坏情况下:循环次数为n-1,交换次数n-1,时间复杂度为O(n^2);

(2)交换法:从第一个元素开始,用当前的元素依次和后面的元素相比较;

最坏情况下:循环次数为n-1,交换次数为n-1,时间复杂度为O(n^2);

(3)选择法(我的通俗叫法:占座法):先占第一个位置,依次占满座位;

最坏情况下:循环次数为n-1(把前n-1个座位都占了,也就排好序了)交换次数不一定,时间复杂度为O(n^2);

(4)插入法(也叫直接插入排序):从第二个元素开始依次抽出,插入到相应的位置

最坏情况下:循环次数为n-1(抽出n-1次),交换次数不一定,时间复杂度为O(n^2);

 《2》常见的高级排序算法有

(1)快速排序(也是一种交换排序):关键在于先在数组中选择一个数字,接下来把数组中的数字分为两部分,比选择小的移到数组的左边,比选择数字大的移到数组的右边

(2)希尔排序(也是一种插入排序):将所有的数据分组,小组内进行排序,之后重新分组,组内数据增多,重新排序(每个步骤都使用直接插入排序)。举一个形象的例子:还是排队打饭,学校有好多班级,不能所有班级都一起打,先按班级(分组)排好队,最后所有的班级再组成一个大组,再一个一个的排着打饭。

(3)堆排序(也是一种选择排序):堆分为大顶堆(父节点大于子节点)和小顶堆(父节点小于子节点),根节点是最大的节点(或者最小的节点),每次挑出根节点之后,将剩余的节点进行重新建堆。

(4)归并排序: 就是相邻两个元素组成一个组,组内进行排序,之后再将组内元素增加,循环比较

0 0