冒泡和快速排序的时间复杂度_java 八大排序算法 冒泡排序 快速排序 堆排序 归并排序 等...

冒泡和快速排序的时间复杂度_java 八大排序算法 冒泡排序 快速排序 堆排序 归并排序 等..._第1张图片

八大排序算法

一、直接插入

1.基本思路

在要排序的一组数中,假设前面(n-1) [n>=2] 个数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。

2.代码实现

1.遍历数组,每次循环从第二个数字往前插入

2.设定插入数和得到已经排好序列的最后一个数的位数。temp和j=i-1。

3.从最后一个数开始向前循环,如果插入数小于当前数,就将当前数向后移动一位。

public static void insertSort(int[] data) {
    

3.时间复杂度和空间复杂度

直接插入排序的平均复杂度为O(n²),最坏时间复杂度:O(n²),空间复杂度:O(1),没有分配内存。

二、希尔排序

针对直接插入排序下的效率问题,有人对此进行了改进与升级,这就是现在的希尔排序。希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。希尔排序是非稳定排序算法。

1.基本思路

1.数的个数为length,i=length/2,将下标差值为i的数分为一组,构成有序序列。

2.再取i=i/2 ,将下标差值为i的数分为一组,构成有序序列。

3.重复第二步,直到k=1执行简单插入排序。

思路:

1.希尔排序(shell sort)这个排序方法又称为缩小增量排序,是1959年D·L·Shell提出来的。该方法的基本思想是:设待排序元素序列有n个元素,首先取一个整数increment(小于n)作为间隔将全部元素分为increment个子序列,所有距离为increment的元素放在同一个子序列中,在每一个子序列中分别实行直接插入排序。然后缩小间隔increment,重复上述子序列划分和排序工作。直到最后取increment=1,将所有元素放在同一个子序列中排序为止。

2.由于开始时,increment的取值较大,每个子序列中的元素较少,排序速度较快,到排序后期increment取值逐渐变小,子序列中元素个数逐渐增多,但由于前面工作的基础,

你可能感兴趣的:(冒泡和快速排序的时间复杂度)