插入排序复习:
先说结论:1,插入排序时间复杂度为O(n^2),额外空间复杂度为O(1);算法实现中可以做到稳定性;
核心思想:插入排序实现思想为,将待排序的数组视作一堆无序的牌,如果要将这堆无序的牌整理为有序,可以顺序依次抽出牌堆里的牌放入手中,每次从牌中抽出一张牌的时候,会将抽出的牌和手中的牌依次比较,直到抽出的牌比手中比较的牌更大,则直接插入;
下面为插入排序Java代码实现:
1 package com.cmbc.test1; 2 3 import java.util.Arrays; 4 5 /** 6 * 插入排序 7 * @author itqcy 8 * 9 */ 10 public class InsertionSort { 11 public static void insertionSort(int[] arr){ 12 for(int i = 1;i<arr.length;i++){ 13 for(int j = i;j>0&&arr[j]<arr[j-1];j--){ 14 swap(arr,j,j-1); 15 } 16 } 17 } 18 19 public static void swap(int[] arr, int i, int j) { 20 arr[i] = arr[i] ^ arr[j]; 21 arr[j] = arr[i] ^ arr[j]; 22 arr[i] = arr[i] ^ arr[j]; 23 } 24 25 public static void printArray(int[] arr) { 26 if (arr == null) { 27 return; 28 } 29 for (int i = 0; i < arr.length; i++) { 30 System.out.print(arr[i] + " "); 31 } 32 System.out.println(); 33 } 34 35 public static int[] copyArray(int[] arr) { 36 if (arr == null) { 37 return null; 38 } 39 int[] res = new int[arr.length]; 40 for (int i = 0; i < arr.length; i++) { 41 res[i] = arr[i]; 42 } 43 return res; 44 } 45 46 public static boolean isEqual(int[] arr1,int[] arr2){ 47 if((arr1==null&&arr2!=null)||(arr1!=null&&arr2==null)){ 48 return false; 49 } 50 if(arr1==null&&arr2==null){ 51 return true; 52 } 53 if(arr1.length!=arr2.length){ 54 return false; 55 } 56 for(int i = 0;i<arr1.length;i++){ 57 if(arr1[i]!=arr2[i]){ 58 return false; 59 } 60 } 61 return true; 62 } 63 64 public static int[] generateRandomArray(int maxSize,int maxValue){ 65 int[] arr = new int[(int)((maxSize+1)*Math.random())]; 66 for(int i = 0;i<arr.length;i++){ 67 arr[i] = (int)((maxValue+1)*Math.random())-(int)((maxValue+1)*Math.random()); 68 } 69 return arr; 70 } 71 72 public static void main(String[] args) { 73 int testTime = 500000; 74 int maxSize = 100; 75 int maxValue = 100; 76 boolean succeed = true; 77 for(int i = 0;i<testTime;i++){ 78 int[] arr1 = generateRandomArray(maxSize, maxValue); 79 int[] arr2 = copyArray(arr1); 80 insertionSort(arr1); 81 Arrays.sort(arr2); 82 if(!isEqual(arr1,arr2)){ 83 succeed = false; 84 } 85 } 86 System.out.println(succeed?"排序结果与对数器结果相同":"排序结果不同"); 87 int[] arr = generateRandomArray(maxSize, maxValue); 88 printArray(arr); 89 insertionSort(arr); 90 printArray(arr); 91 } 92 93 94 }