排序以及复杂度分析(快速排序,堆排序等)

下图是常见排序算法


1.冒泡排序

主要思想就是相邻的数据进行比较并且交换,如果前一个数a比下一个数大的话就交换位置,直到没有需要交换位置的时候停止。时间复杂度是O(n^2),比较稳定

2.快速排序

快排的主要思想就是,选基准值,再从后往前找比基准值小的数,放到前面,再从前往后找比基准值大的数放的后面,直到再中间相遇,然后把基准值放到中间,依次循环直到有序,时间复杂度是O(nlogn)。通常是最快的。

3.归并排序

归并排序是指,将数组二分,然后再依次进行合并排序,使用递归,合并排序的步骤是用两个指针控制两个数组,将较小的放进新建立的数组,直到将两个数组的数全部排序到新建立的数组,然后再用新建立的数组替换原来的数组的对应位置。(O(nlogn))


4.堆排序Heapsort

特别适合数据量很大的场合,因为其不基于递归,不会发生堆栈溢出,排序速度略低于快排。时间复杂度是O(nlongn)。

主要思想是利用大根堆和小根堆进行排序,堆就类似完全二叉树,每一行都是满的,除了最后一行,大根堆就是每一个节点都大于他的左右节点。

每次构造大根堆,根节点就是最大值,把根节点放到最后,将其余元素继续构造大根堆,如此循环直至所有元素都排列完毕。

构造大根堆的过程:第一次是从下到上的构造,以后都是从上都下构造,每构造一个节点,就要考虑,它的交换节点还是不是满足大根堆。

参考:https://www.cnblogs.com/onepixel/articles/7674659.html

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容