排序算法
插入排序
概述
- 插入排序是简单直观。对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。实现上通常采用in-place排序,需要反复把已排序元素逐步向后挪位,为新元素插入提供空间。
- 时间复杂度:O(N2),最好为O(n),最坏是O(n2)
- 空间复杂度:O(1)
- 对随机数据的排序,效率比冒泡和选择都高。对极端数据可能存在交换次数过的情况
- 算法步骤
- 从待排序列中拿出一个元素;
- 从后往前扫描已排序列;
- 若该元素小于被扫描元素,将该元素直接插入被扫描元素之前;若不小于被扫描元素,则插入被扫描元素之后
- 重复以上步骤,知道待排序列所有元素被逐一拿出。
Java实现
package com.example.demo.service;
import java.util.Arrays;
public class InsertSort {
public static void main(String[] args) {
int[] sequence = {6,5,3,4,3,2,1};
for(int index = 1;index<sequence.length;index++){
int key = sequence[index];
for(int i = index-1;i>=0;i--){
if(key<=sequence[i]){
sequence[i+1] = sequence[i];
sequence[i] = key;
}
}
}
System.out.println(Arrays.toString(sequence));
}
}