最最最基础的排序大算法

技术篇,话不多说,代码走起。

时间复杂度统计:

最最最基础的排序大算法

    1.冒泡排序最最最基础的排序大算法

    算法规则:由于算法每次都将一个最大的元素往上冒,我们可以将待排序集合(0...n)看成两部分,一部分为(k..n)的待排序unsorted集合,另一部分为(0...k)的已排序sorted集合,每一次都在unsorted集合从前往后遍历,选出一个数,如果这个数比其后面的数大,则进行交换。完成一轮之后,就肯定能将这一轮unsorted集合中最大的数移动到集合的最后,并且将这个数从unsorted中删除,移入sorted中。

    代码截图:

最最最基础的排序大算法

    运行结果:

最最最基础的排序大算法

2.选择排序最最最基础的排序大算法

    算法规则:将待排序集合(0...n)看成两部分,在起始状态中,一部分为(k..n)的待排序unsorted集合,另一部分为(0...k)的已排序sorted集合,在待排序集合中挑选出最小元素并且记录下标i,若该下标不等于k,那么 unsorted[i] 与 sorted[k]交换 ,一直重复这个过程,直到unsorted集合中元素为空为止。

    代码截图:

最最最基础的排序大算法

    

    运行结果:

最最最基础的排序大算法

3.快速排序最最最基础的排序大算法

    算法规则:快速排序使用分治法(Divide and conquer)策略来把一个序列(list)分为较小和较大的2个子序列,然后递归地排序两个子序列。

步骤为:

    挑选基准值:从数列中挑出一个元素,称为“基准”(pivot),

分割:重新排序数列,所有比基准值小的元素摆放在基准前面,所有比基准值大的元素摆在基准后面(与基准值相等的数可以到任何一边)。在这个分割结束之后,对基准值的排序就已经完成,

递归排序子序列:递归地将小于基准值元素的子序列和大于基准值元素的子序列排序。

    递归到最底部的判断条件是数列的大小是零或一,此时该数列显然已经有序。

    代码截图:

最最最基础的排序大算法

    运行结果:

最最最基础的排序大算法

4.插入排序

    算法规则:

    一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:

    1.从第一个元素开始,该元素可以认为已经被排序

    2.取出下一个元素,在已经排序的元素序列中从后向前扫描

    3.如果该元素(已排序)大于新元素,将该元素移到下一位置

    4.重复步骤3,直到找到已排序的元素小于或者等于新元素的位置

    5.将新元素插入到该位置后

    6.重复步骤2~5

    代码截图: