排序
一个对于程序员而言历史性的话题
目前已经有了非常多非常成熟的排序算法,虽然可能在ACM比赛中并不会直接让你去实现一个排序,但是你在今后面试,甚至是和别人吹牛的时候,口述、手撕一个排序算法,岂不是瞬间逼格高了一截。下面来分享几种常用的算法~
冒泡排序
大学中学习C语言的第二个排序算法
每次选择两个元素进行比较,按照需求进行交换,循环n次(n为元素总数),这样小(或者大)的元素会不断“冒泡”到前面来,算法分析时间复杂度为O(n²),在C语言中的代码如下:
快速排序
简称快排,时间复杂度不固定,如果在最坏情况下(元素刚好都是反向的)速度比较慢,和选择排序一个效率时间复杂度达到O(n²),但是在比较理想的情况下时间复杂度为O(nlogn)。快排每次选择一个元素并且将整个数组以这个元素分为两部分,根据需求不同,元素选择一般会分为:1.永远选第一个、2.永远选最后一个、3.随机选择、4.取中间;快速排序的核心是分区,分区是为了传入一个数组和选定的一个元素,把所有小于那个元素的其它元素放在左边,所有大于的放在右边。流程图如下。
下面是简化后的快速排序实现代码
Bogo排序
这里还想提一下这个非常不实用而且非常原始的排序方法,仅供娱乐···在计算机科学中,Bogo排序是个既不实用又原始的排序演算法,其原理等同将一堆卡片抛起,落在桌上后检查卡片是否已经整齐排列好,如果没有就再抛一次。其名字源自Quantumbogodynamics,又称 bozo soart、blort sort 或猴子排序。下面是以C语言代码实现。
优秀的算法很多,在学习的过程中,我们有必要学习各个排序算法的实现思路,从而提升自己对于程序设计的思路,如何优化,如何效率等。