插入排序,在数组中,保证 从位置0 到 p 位置 配上的元素都是已排序状态。每次比较 p+1 位置上的元素和已排序的列表,将 p+1 位置上的元素,加入到已排序的列表中。
/**
* created by Demon, on 2018/9/6
*/
public class InsertSort {
@Test
public void testSort() {
int[] arr = {22, -4, 0, 45, 76, 32, 3, -98};
insertSort(arr);
for (int i : arr) {
System.out.print(i + " ");
}
}
/**
* 插入排序
* @param arr
*/
private void insertSort(int[] arr) {
if (arr.length <= 1) {
return;
}
for (int i = 1; i < arr.length; i++) {
int j;
int tmp = arr[i];
// 当前的数和前面已经排好序的数比较大小
for (j = i; j > 0 && tmp < arr[j - 1]; j--) {
// 如果当前数比前一个位数数小, 前一个位置的数后移一位
arr[j] = arr[j - 1];
}
// 上面j-- 后,比较值,不满足条件,跳出循环,将当前值放置到指定位置
arr[j] = tmp;
}
}
}
运行输出:
-98 -4 0 3 22 32 45 76