插入排序:从下标为i的元素向后开始遍历数组,如果当前元素小于前面[0,i-1]中的一个元素,则前面元素依次后移,将当前元素插入进去,完成排序。插入排序的时间复杂度为O(n^2)-----n个数,遍历n-1次
插入排序是稳定的,数值相等的元素不会位置发生交换
package Asort;
public class InsertSort {
/*
* 插入排序
* 参数说明:
* a -- 待排序的数组
* n -- 数组的长度
*/
public static void insertSort(int[] a, int n) {
int temp;//放于for循环外面是为了防止重复创建变量
int j;
for(int i = 1; i < n;i++){//排序的趟数
temp = a[i];//赋给temp是为了防止索引i之前的元素向后移动覆盖了索引i的元素
j = i-1;
for(; j>=0&&a[j]>temp; j--) {//将大于i位置元素的元素向后移
a[j+1] = a[j];
}
a[j+1]= temp;//找到i应该在的位置,将值放置此处
}
}
public static void main(String[] args) {
int i;
int[] a={20,40,30,10,60,50};
System.out.println("before sort:");
for (i = 0; i < a.length; i++) {
System.out.print(a[i]+" ");
}
System.out.println();
insertSort(a, a.length);
System.out.println("after sort:");
for (i = 0; i < a.length; i++) {
System.out.print(a[i]+" ");
}
}
}