package com.sort.admin;
public class InsertionSort {
/**
* 插入排序 - O(n^2)
*
* 循环N次,每次循环里面将最后一个数向前冒泡跟前面数两两相比较,小则交换位置,大则不变
*
* <p>
* 0 ~ 1 第一次从 0 ~ 1 将1位置的值跟前面比较,小则交换位置
* 0 ~ 2 第二次从 0 ~ 2 将2位置的值跟前面比较,小则交换位置
* 0 ~ 3 第三次从 0 ~ 3 将3位置的值跟前面比较,小则交换位置
* ~
* 0 ~ N-1 第 N-1 次从 0 ~ N-1 将 N-1 位置的值跟前面比较,小则交换位置
*
* 第一个for循环:控制循环次数
* 第二个for循环:将每次中的最后一个位置的值跟前面比较,小则交换位置
* </p>
*
* @param arr 需要排序的数组
*
*/
public static void sort(int[] arr) {
if (arr == null || arr.length < 2) {
return;
}
// 有点类似冒泡倒排序,一共要选择N次,假设前面数组已经排好
for (int i = 1; i < arr.length; i++) {
// 向前找,如果后面的数小于前面的数则交换位置
for (int j = i; j > 0; j--) {
if (arr[j] < arr[j - 1]) {
swap(arr, j, j -1);
}
}
}
}
public static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
public static void print(int[] arr) {
System.out.println("arr -- >");
for (int j : arr) {
System.out.print(j + " ");
}
System.out.println();
}
public static void main(String[] args) {
int[] arr = {3, 2, 7, 5, 1, 9, 9, 4, 6, 8};
print(arr);
sort(arr);
print(arr);
}
}
插入排序
- 本文链接: https://sly.plus/archives/insertionsort
- 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 4.0 许可协议。转载请注明出处!