插入排序
Posted yuanfei1110111
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了插入排序相关的知识,希望对你有一定的参考价值。
插入排序类似于整理扑克牌,基本操作是将一个记录分为有序数列、待插入数列,将待插入数列依次插入到有序数列中对应的位置,最终得到一个有序的数列;
插入排序的时间复杂度为O(n^2),空间复杂度为O(1),是稳定的排序方法,适用于数量较少的排序,相对冒泡排序而言是一种较为快捷方便的排序算法。
具体步骤:
1.默认序列中第0个元素是有序的;
2.从下标为1的元素开始,取当前下标i位置处的元素a[i]保存到一个临时变量waitInsert中;
3.对前半部分有序序列循环遍历,并与waitInsert比较,直到遇到一个比waitInsert小的元素(这里默认从小到大排序),此时的下标为j,那么现在只需要对a[j+i]进行赋值waitInsert即可;
4.将待插入元素的下标i向后推移一个位置;
5.重复2~4步骤,直到乱序序列中的元素全部被插入到有序序列中;
示例代码:
public class Test {
public static void main(String[] args) {
int[] arr = {6, 3, 8, 2, 9, 1};
System.out.println("排序前数组为:");
for(int i : arr) {
System.out.print(i + ", ");
}
System.out.println();
sort(arr);
System.out.println("排序后数组为:");
for(int i : arr) {
System.out.print(i + ", ");
}
}
public static void sort(int[] arr) {
for(int i=1; i<arr.length; i++) {
int j = i;
int waitInsert = arr[i];
while(j > 0 && waitInsert < arr[j - 1]) {
arr[j] = arr[j-1];
j--;
}
arr[j] = waitInsert;
}
}
}
以上是关于插入排序的主要内容,如果未能解决你的问题,请参考以下文章
直接插入排序 ,折半插入排序 ,简单选择排序, 希尔排序 ,冒泡排序 ,快速排序 ,堆排序 ,归并排序的图示以及代码,十分清楚