• 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);
        }
    }
  • 相关阅读:
    hdu 5001(概率DP)
    hdu 5505(数论-gcd的应用)
    csu 1749: Soldiers ' Training(贪心)
    Button Bashing(搜索)
    Jury Jeopardy(反向模拟)
    interesting Integers(数学暴力||数论扩展欧几里得)
    湖南省第六届省赛题 Biggest Number (dfs+bfs,好题)
    csu 1551(线段树+DP)
    csu 1555(线段树经典插队模型-根据逆序数还原序列)
    csu 1552(米勒拉宾素数测试+二分图匹配)
  • 原文地址:https://www.cnblogs.com/alias-blog/p/5786570.html
Copyright © 2020-2023  润新知