插入排序
一、概念
每次将一个待排序的记录按照关键码的大小插入到一个已排好序的有序序列中,直到全部记录排好序。
二、复杂度
排序方法 | 最差时间分析 | 最好时间分析 | 平均时间复杂度 | 空间复杂度 | 稳定性 |
插入排序 | O(n2) | O(n) | O(n2) | O(1) | 稳定 |
三、代码实现
1 package sort; 2 3 import java.util.Arrays; 4 5 //插入排序 6 public class InsertSort { 7 public void insertSort(int[] array){ 8 if(array.length == 0 || array == null) 9 return; 10 int currentValue = 0;//每次排序需要的值 11 for(int currentIndex = 1; currentIndex < array.length; currentIndex++){ 12 int lastSortedIndex = currentIndex-1;//最后排好序的位置指针 13 currentValue = array[currentIndex]; 14 for(;lastSortedIndex >= 0 && currentValue < array[lastSortedIndex];lastSortedIndex--){ 15 array[lastSortedIndex+1] = array[lastSortedIndex];//后移 16 } 17 array[lastSortedIndex+1] = currentValue; 18 printArray(array,currentIndex); 19 } 20 } 21 public void printArray(int a[],int count){ 22 if(count != 0) 23 System.out.print("第" + count + "次 "); 24 for(int m = 0; m < a.length; m++){ 25 if(count == m && count != 0) 26 System.out.print("|"); 27 System.out.print(a[m] + " "); 28 } 29 System.out.println(); 30 } 31 public static void main(String[] args) { 32 int a[] = {11,7,6,1,8,4,3,2}; 33 InsertSort is = new InsertSort(); 34 is.insertSort(a); 35 Arrays.sort(a); 36 } 37 }