插入排序Java代码实现

插入排序复习:

先说结论: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 }

猜你喜欢

转载自www.cnblogs.com/itqczzz/p/9384028.html