目录
1.基本思想
插入排序(Insertion Sort)是一种简单直观的排序算法,它的基本思想是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
2.冒泡排序的步骤
以下是插入排序的详细步骤:
-
将第一个元素视为已排序序列:在排序开始时,我们通常认为第一个元素是一个已经排序好的序列。
-
从第二个元素开始遍历:将第二个元素作为"key"(即待插入元素)。
-
比较"key"与已排序序列:从已排序序列的最后一个元素开始,向前遍历比较,找到"key"应该插入的位置。
-
插入"key":将"key"插入到已找到的位置,使得插入后该位置及其后的元素仍然有序。
-
重复步骤2-4:将下一个元素作为新的"key",重复上述过程,直到所有元素都被插入到正确的位置。
-
完成排序:当所有元素都被插入到已排序序列中时,整个序列就被排序完成了。
3.冒泡排序算法的实现
java
package com.test.demo;
/**
* 插入算法
*/
public class InsertSortExample {
public static void main(String[] args)
{
int[] numbers = {64, 34, 25, 12, 22, 11, 90};
insertSort(numbers);
System.out.println("Sorted array: ");
for (int number : numbers) {
System.out.print(number + " ");
}
}
public static void insertSort(int[] array){
int tmp;
int j;
// 从下标为1的元素开始选择合适的位置插入,因为下标为0的只有一个元素,默认是有序的
for (int i=1,len = array.length;i<len;i++){
//记录要插入的数据
tmp=array[i];
// 从已经排序的序列最右边的开始比较,找到比其小的数
j=i;
while (j>0 && tmp<array[j-1]){
array[j]= array[j-1];
j--;
}
// 存在比其小的数,插入
if(j !=i){
array[j] = tmp;
}
}
}
}
4.时间复杂度分析
插入排序的时间复杂度为O(n^2),其中n是序列的长度。这是因为算法需要进行n-1次插入操作,每次插入操作平均需要比较n项。
5.总结
尽管插入排序在最坏情况下效率不高,但它对于小型数据集或基本有序的数据集非常有效。插入排序的优点包括:
- 稳定性:可以保证相等的元素在排序后保持原来的相对顺序。
- 原地排序:不需要额外的存储空间。
- 简单性:算法实现简单,易于理解和编程。
插入排序通常用作其他更高级排序算法(如归并排序和快速排序)的辅助方法,尤其是在处理小型数组或数组的子部分时。