插入排序是将一个序列分为两部分,左边为有序部分,右边为待排序部分,每次取待排序部分的第一个数,与有序部分相比较,将其放入左边的序列中,成为一个新的有序序列。
import java.util.Scanner;
public class InsertionSort {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNextInt()) {
int n = sc.nextInt();
int[] arr = new int[100001];
for (int i=0; i<n; i++) {
arr[i] = sc.nextInt();
}
insertionSort(arr, n);
for (int i=0; i<n; i++) {
System.out.print(arr[i]+" ");
}
System.out.println();
}
}
public static void insertionSort(int[] arr, int n) {
for (int i=0; i<n; i++) {
int tmp = arr[i];
int j;
for (j=i-1; j>=0; j--) {
if (tmp < arr[j]) {
arr[j+1] = arr[j];
}else{
break;
}
}
arr[j+1] = tmp;
}
}
}
插入排序最好的时间复杂度为已经有序的情况,这样可以省去内部的for循环,从而使时间复杂度降为O(n),而最坏和一般的时间复杂度为O(n^2),插入排序也是一个稳定的排序方法。