zoukankan      html  css  js  c++  java
  • 插入排序和希尔排序

    插入排序的时间复杂度是O(N^2)
    希尔排序的时间复杂度和步长设置有关,如果步长初始为数组总长度的一半,然后每次都取一半,最后的时间复杂度为O(N*logN)
    具体的代码如下:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    #include<iostream>
    #include<cstdio>
    #include<stdlib.h>
    #include<assert.h>
    #include<map>
    #include<vector>
    #include<set>
    using namespace std;
     
    void shell_sort(vector<int>& v){
        int len=v.size();
        len=len/2;
        while(len>=1){
            for(int i=0;i<len;i++){//begin point of insert_sort
                for(int j=i+len;j<v.size();j=j+len)//insert_sort
                {
                    int k=j-len;
                    int key=v[j];
                    while(v[k]>key && k>=0){
                        v[k+len]=v[k];
                        k=k-len;
                    }
                    v[k+len]=key;
                }//end of insert_sort
            }
            len=len/2;
        }
    }
     
    void insert_sort(vector<int>& v){
        for(int i=1;i<v.size();i++)
        {
            int j=i-1;
            int key=v[i];
            while(v[j]>key && j>=0){
                v[j+1]=v[j];
                j=j-1;
            }
            v[j+1]=key;
        }
    }
     
    int main()
    {
        int a[]={3,1,2,5,9,10,2,1,4,8};
        vector<int> v(a,a+10);
        shell_sort(v);
        for(int i=0;i<v.size();i++)
            cout<<v[i]<<" ";
        cout<<endl;
        getchar();
        return 0;
    }





  • 相关阅读:
    spring原理
    架构师和数学
    项目经理需要注意的地方
    如何快速掌握一门新技术
    项目管理要做啥
    编程原则
    架构设计的常用思想
    聊聊编程范式
    程序员与哲学家
    IT人员如何有效规划自己时间
  • 原文地址:https://www.cnblogs.com/gremount/p/5830925.html
Copyright © 2011-2022 走看看