Java直接插入排序

时间:2023-02-15 08:39:36

插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

算法步骤

1)将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。

2)从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。)

算法图示

Java直接插入排序

算法基本性能

排序方法 平均时间复杂度情况 最好情况 最坏情况 空间复杂度 稳定性
插入排序 O(n2) O(n) O(n2) O(1) 稳定

Java代码

package com.sort;

import java.util.Random;

public class Main {

    // 从小到大
private static void sort(int[] array) {
if (array.length <= 1) {
return;
}
for (int i = 1; i < array.length; i++) {
/**
* 因为0~i-1为有序的,如果i位置的大于i-1位置的,说明0~i也是有序的,
* 反之需要在0~i-1直接找出i位置的元素的正确位置插入
*/
if (array[i] < array[i - 1]) {
/**
* 先保存i位置元素
*/
int temp = array[i];
int j = i - 1;
/**
* 从i-1开始向前查找,一直到找到比i位置元素小的位置,然后插入
*/
for (; j >= 0 && array[j] > temp; j--) {
/**
* 没有找到,那么将此位置的元素后移一位,腾出位置
*/
array[j + 1] = array[j];
}
/**
* 将i位置元素放在腾出的位置上面
*/
array[j + 1] = temp;
}
}
} /**
* 获取指定长度的随机数组
*/
public static int[] getRandomArray(int n) {
int[] array = new int[n];
Random random = new Random();
for (int i = 0; i < array.length; i++) {
array[i] = random.nextInt(500);
}
return array;
} /**
* 打印指定数组
*/
public static void outputArray(int[] array) {
for (int i : array) {
System.out.print(i + " ");
}
System.out.println("");
} public static void main(String[] args) {
int[] array = getRandomArray(10);
outputArray(array);
sort(array);
outputArray(array);
}
}