插入排序时间复杂度:O(n^2)
package com.wind.sort;
public class InsertionSort {
public int[] sort(int[] arr) {
// 开始位置为1, 由于前面只有一个元素,可以认为是排好序的
for(int i = 1; i < arr.length; i++) {
// 当前一个元素比当前元素大,掉换位置,否则结束(因为前面的元素已经从小到大排列好了)
for(int j = i; j > 0 && arr[j - 1] > arr[j]; j--) {
swap(arr, j - 1, j);
}
}
return arr;
}
private void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
测试代码:
package com.wind.sort;
import java.util.Arrays;
public class SortTest {
public static void main(String[] args) {
InsertionSort sort = new InsertionSort();
final int LEN = 20;
for(int i = 0; i < 100; i++) {
// generate random array
int len = (int) (Math.random() * LEN);
int[] arr = new int[len];
for(int j = 0; j < arr.length; j++) {
arr[j] = (int) (Math.random() * LEN);
}
// sort
arr = sort.sort(arr);
// check sort result
for(int j = 0; j < arr.length - 1; j++) {
if(arr[j] > arr[j + 1]) {
System.err.println("Error: " + Arrays.toString(arr));
break;
}
}
}
}
}