zoukankan      html  css  js  c++  java
  • Java直接插入排序

    插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

    算法步骤

    1)将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列

    2)从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。)

    算法图示

    算法基本性能

    排序方法 平均时间复杂度情况 最好情况 最坏情况 空间复杂度 稳定性
    插入排序 O(n2) O(n) O(n2) O(1) 稳定

    Java代码

    package com.sort;
    
    import java.util.Random;
    
    public class Main {
    
        // 从小到大
        private static void sort(int[] array) {
            if (array.length <= 1) {
                return;
            }
            for (int i = 1; i < array.length; i++) {
                /**
                 * 因为0~i-1为有序的,如果i位置的大于i-1位置的,说明0~i也是有序的,
                 * 反之需要在0~i-1直接找出i位置的元素的正确位置插入
                 */
                if (array[i] < array[i - 1]) {
                    /**
                     * 先保存i位置元素
                     */
                    int temp = array[i];
                    int j = i - 1;
                    /**
                     * 从i-1开始向前查找,一直到找到比i位置元素小的位置,然后插入
                     */
                    for (; j >= 0 && array[j] > temp; j--) {
                        /**
                         * 没有找到,那么将此位置的元素后移一位,腾出位置
                         */
                        array[j + 1] = array[j];
                    }
                    /**
                     * 将i位置元素放在腾出的位置上面
                     */
                    array[j + 1] = temp;
                }
            }
        }
    
        /**
         * 获取指定长度的随机数组
         */
        public static int[] getRandomArray(int n) {
            int[] array = new int[n];
            Random random = new Random();
            for (int i = 0; i < array.length; i++) {
                array[i] = random.nextInt(500);
            }
            return array;
        }
    
        /**
         * 打印指定数组
         */
        public static void outputArray(int[] array) {
            for (int i : array) {
                System.out.print(i + " ");
            }
            System.out.println("");
        }
    
        public static void main(String[] args) {
            int[] array = getRandomArray(10);
            outputArray(array);
            sort(array);
            outputArray(array);
        }
    }
  • 相关阅读:
    年末反思
    Flink运行时架构
    Phoenix 启动报错:Error: ERROR 726 (43M10): Inconsistent namespace mapping properties. Cannot initiate connection as SYSTEM:CATALOG is found but client does not have phoenix.schema.
    Clickhouse学习
    Flink简单认识
    IDEA无法pull代码到本地,Can't Update No tracked branch configured for branch master or the branch doesn't exist.
    第1章 计算机系统漫游
    简单的 Shell 脚本入门教程
    开源≠免费 常见开源协议介绍
    MySQL 视图
  • 原文地址:https://www.cnblogs.com/alias-blog/p/5786570.html
Copyright © 2011-2022 走看看