八大排序算法详解

一.八大排序算法分类

 

 

二.时间复杂度比较

三.稳定性分析

判断稳定性是在排序中有重复元素,在经过排序后,其前驱与后继的逻辑没有改变,则认为是稳定的,相反,则不稳定。

例如:a,z,c,d1,d2,b

假设上述为需要排序的数列,其中d1 = d2 

排序后:a,b,c,d1,d2,z  则认为此排序是稳定的(d1,d2的前后逻辑没有改变)

排序后:a,b,c,d2,d1,z  相等的元素发生位置的移动,或者存在可能位置移动,则是不稳定的排序

四.时间与空间复杂度

时间复杂度:是在算法中用来定性描述运行时间的函数。用O表示,基本操作重复执行的次数是问题规模n的某个函数f(n),于是算法的时间量度可以记为:T(n) = O(f(n)),简称O(n)。

空间复杂度:指运行完一个程序所需内存的大小,其中n为问题的规模,用S(n)表示。

五.排序算法实现

5.1简单插入排序

简单插入排序:在排序时,首先认为第一个元素为有序数列,一次从第二个开始,将元素插入到有序数列中。当插完最后一个元素,整个数列将是有序数列。

例如:3,2,5,8,4

首先认为 3 是有序数列,从 2 开始,一次插入到有序数列中。

        0   1    2   3    4

源数据:           3,2,5,8,4

第一次循环后:2,3,5,8,4  岗哨指向下标1,发现2比3小,需要交换,交换完岗哨后移,指下标2

第二次循环后:2,3,5,8,4   岗哨继续后移,指向下标3  

第三次循环后:2,3,5,8,4   岗哨继续后移,指向下标4

第四次循环后:2,3,5,4,8   4需要交换,4与 8 交换

第五次循环后:2,3,4,5,8        4继续交换,直到不能交换为止。岗哨继续后移出界,结束。

C语言实现如下:

结果:

JAVA语言实现如下:

结果:

分析:简单插入排序属于稳定排序,当相同元素比较后,不会发生交换。平均时间复杂度为O(n2)。

 5.2 希尔排序

 

猜你喜欢

转载自www.cnblogs.com/baizhuang/p/9285610.html