zoukankan      html  css  js  c++  java
  • 插入排序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 }
  • 相关阅读:
    tech 浅谈 Yield
    Python strip lstrip rstrip使用方法
    Python strip lstrip rstrip使用方
    Python 的学习脚印(1)
    python中列表的赋值
    python的re模块的sub方法
    Python的异常处理机制
    [python] shutil模块
    【ActiveMq】启动amq时遇到java.net.URISyntaxException: Illegal character in hostname at index处理方法
    【sql总结】
  • 原文地址:https://www.cnblogs.com/itqczzz/p/9384028.html
Copyright © 2011-2022 走看看