zoukankan      html  css  js  c++  java
  • 算法学习——插入排序

    过程

    • 从待排序数组的第2个数开始一直到第n个数,假设待排序的数为key, 下标为j;
    • 依次与前面的i = j-1个有序数相比较,找到key该插入的位置;
    • 对有序数列进行调整并插入key;
    • 重复上面操作,知道完成第n个数的插入

    例如,对A = {5, 2, 4, 6, 1, 3}进行从小到大的插入排序过程如下:

    代码

    • 伪代码
    InsertionSort(A)
        for j = 2 to A.length
            key = A[j]
            i = j - 1
            while i > 0 and A[i] > key
                A[i+1] = A[i]
                i = i - 1
            A[i+1] = key
    • C代码
    void InsertionSort(int a[], int n)
    {
        int i, j, key;
    
        for (j = 1; j < n; j++) {
            key = a[j];
            i = j - 1;
            while (i >= 0 && a[i] > key) {
                a[i+1] = a[i];
                i--;    
             }    
             a[i+1] = key;  
        }         
    }

    总结

    • 插入排序的平均时间复杂度为O(n2);
    • 插入排序不适合数据量比较大的排序,对于千以内量级插入排序还是不错的选择.
  • 相关阅读:
    希尔排序之C++实现(初级版)
    CF9D How many trees?
    IOI2015 boxes纪念品盒
    CSP-S 2019图论总结
    数据生成器
    Special-Judge模板
    CF293B Distinct Paths
    浅谈几种常见的剪枝方式
    CF620E New Year Tree
    浅谈DFS序
  • 原文地址:https://www.cnblogs.com/ezhengnan/p/3644511.html
Copyright © 2011-2022 走看看