三大查找八大排序

排序

一、选择排序

原理:在N-i+1个记录中找到最小的那个值的位置,然后与i位置的值进行交换。

时间复杂度分析:由于到第I个数前都是有序的,所以比较的次数是:n-1+n-2+。。。+1=n*(n-1)/2,交换的次数最多是n-1次,因此时间复杂度为比较次数和交换次数的总和0(n2);


二、冒泡排序

原理:从数组最后一个值开始,比较N-i次,每次是两两比较相邻的值,若序号大的值比序号小的值小,则交换。

时间复杂度分析:每次都要比较N-i次,当整个数组是逆序时,每次都要交换,则时间复杂度为2*n*(n-1)/2=O(n2)



三、直接插入排序

原理:在一个数组中,默认第一个数值是有序的,以后的数都是在有序数组中正确的位置插入,当找到这个正确的位置时,这个位置后的数都要后移一个位置。

时间复杂度分析:最好的时候是整个数组是有序的,此时只要循环一次数组就可以了,O(n),最坏的情况是反序,每次都要将有序数组后移,(i+1)求和,O(n2)


四、希尔排序

原理:将数组分成几个小序列进行直接插入排序,设一个增量,直至增量等于1的时候,停止算法。

时间复杂度:最好o(n3/2),最坏,O(n2)


五、快速排序

原理:



查找

一、无序查找

原理:在头结点设置哨兵,当查找完一轮数组后,若找不到则返回0下表

时间复杂度分析:减少了比较的次数,不用判断下标是否越界了。


二、有序查找

1、折半查找

原理:每次都从一段数组中间比较。

时间复杂度分析:最好的时候是一次,最坏的时候是二叉树的深度[log(2)n}+1,

你可能感兴趣的:(三大查找八大排序)