• 插入排序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 }
  • 相关阅读:
    Makefile目标汇总和变量的高级用法
    make命令详解
    再议HTML Clipboard Format
    编写一个Open Live Writer的VSCode代码插件
    win7安装ps cc 2019切片闪退
    redis cluster 数据迁移
    linux服务器两块网卡路由优先级冲突 Metric值(转)
    电梯怎么测,附常见的测试用例
    vue中watch属性深度监听,监听数组或多维数组下层
    前端JS base64与图片互转
  • 原文地址:https://www.cnblogs.com/itqczzz/p/9384028.html
Copyright © 2020-2023  润新知