zoukankan      html  css  js  c++  java
  • 算法导论—排序之插入排序



    void insertion_sort(vector<int> &num){
        for(int i = 1; i < num.size(); i++){
            int j = i-1;
            int val = num[i];
            while(j>=0 && num[j] >= val){
                num[j+1] = num[j];
                j--;
            }
            num[j+1] = val;
        }
    
    
    }

    每次迭代时,将num[i] 作为key值。且前子数组[0,i-1] 构成已排好序。每次与左边的数比較。未满足条件。则进行右移


    //降序
    void insertion_sort(vector<int> &num){
        for(int i = 1; i < num.size(); i++){
            int j = i-1;
            int val = num[i];
            while(j>=0 && num[j] < val){
                num[j+1] = num[j];
                j--;
            }
            num[j+1] = val;
        }
    
    
    }

    效率分析:

    最优情况:

    原数列已排好序,即不进行while循环,效率为 n

    最差情况:

    原数列为逆序,则每次迭代要进行i-1次循环,则效率为  n方

查看全文
  • 相关阅读:
    Coursera-Getting and Cleaning Data-week4-R语言中的正则表达式以及文本处理
    Coursera-Getting and Cleaning Data-Week3-dplyr+tidyr+lubridate的组合拳
    Coursera-Getting and Cleaning Data-Week2-课程笔记
    Coursera-Getting and Cleaning Data-week1-课程笔记
    Coursera系列-R Programming-Final Week-Assignment3 & 总结
    Coursera系列-R Programming第三周-词法作用域
    Coursera系列-R Programming第二周
    ACCESS应用笔记<五>——慢慢要学会做项目管理·
    使用ubuntu过程中遇到的问题汇总
    圆方树学习笔记
  • 原文地址:https://www.cnblogs.com/ldxsuanfa/p/10940502.html
  • Copyright © 2011-2022 走看看