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

    直接插入排序


    title: 直接插入排序
    tags: 数据结构与算法之美
    author: 辰砂


    1.排序过程

    名词解释:整个排序过程为n-1趟插入,即先将序列中第1个记录看成是一个有序子序列,然后从第2个记录开始,逐个进行插入,直至整个序列有序

    例(13,6,3,31,9,27,5,11)

    13】, 6, 3, 31, 9, 27, 5, 11

    6, 13】, 3, 31, 9, 27, 5, 11

    3, 6, 13】, 31, 9, 27, 5, 11

    3, 6, 13,31】, 9, 27, 5, 11

    3, 6, 9, 13,31】, 27, 5, 11

    3, 6, 9, 13,27, 31】, 5, 11

    3, 5, 6, 9, 13,27, 31】, 11

    3, 5, 6, 9, 11,13,27, 31

    2.基本步骤

    1.在R[1..i-1]中查找R[i]的插入位置,
    R[1..j].key R[i].key< R[j+1..i-1].key;

    2.将R[j+1..i-1]中的所有记录均后移一个位置;

    3.将R[i] 插入到R[j+1]的位置上。

    3.算法分析

    假设对象个数为n,则执行n-1趟,比较次数和移动次数与初始排列有关

    最好情况下:每趟只需比较 1 次,不移动 。总比较次数为 n-1

    最坏情况下:第 i 趟比较i次,移动i+1次

    若出现各种可能排列的概率相同,则可取最好情况和最坏情况的平均情况

    平均情况比较次数和移动次数为n2/4
    时间复杂度为 o(n2)
    空间复杂度为 o(1)
    是一种稳定的排序方法
    

    4.完整代码示例

    /**
     * @description: 插入排序
     *
     * 插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法。
     * 它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
     *
     * 1 算法描述
     * 一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:
     *
     * 从第一个元素开始,该元素可以认为已经被排序;
     * 取出下一个元素,在已经排序的元素序列中从后向前扫描;
     * 如果该元素(已排序)大于新元素,将该元素移到下一位置;
     * 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;
     * 将新元素插入到该位置后;
     * 重复步骤2~5。
     **/
    public class InsertionSort {
        public static void main(String[] args) {
    
        }
    
        public static void insertionSort(int [] arr){
            int len = arr.length;
            int preIndex, current;
            for (int i = 1; i < len; i++) {
                preIndex = i - 1;
                current = arr[i];
                while (preIndex >= 0 && arr[preIndex] > current) {
                    arr[preIndex + 1] = arr[preIndex];
                    preIndex--;
                }
                arr[preIndex + 1] = current;
            }
        }
    }
    
  • 相关阅读:
    禅道 之 项目开发必备
    Cmd 命令大全
    Php 性能参数优化 及 Iptables 防火墙限制用户访问平率
    Nginx 性能参数优化
    Mysql 性能调优参数
    Postfix的工作原理
    python三次输入错误验证登录
    python shopping incomplete code
    MySQL + Atlas --- 部署读写分离
    网站流量分析项目day03
  • 原文地址:https://www.cnblogs.com/tojian/p/9935072.html
Copyright © 2011-2022 走看看