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

    特点:

    1)不稳定的算法;

    2)只能适用于顺序结构;

    3)增量的取法多,并且时间依赖于增量的取法;

    4)时间复杂度:O(nlog2n)  ;

    5)空间复杂度:O(1).

     1 #include <iostream>
     2 #include <stdlib.h>
     3 #include <vector>
     4 #include <string>
     5 #include <time.h>
     6 
     7 using namespace std;
     8 
     9 void showall(vector<int> &number)
    10 {
    11     for(int i = 0; i < number.size();i++)
    12     {
    13         cout << "number[" << i << "] = " << number[i] << endl;
    14     }
    15 }
    16 //插入排序之希尔排序
    17 void shellinsert(vector<int> &number)
    18 {
    19     int length = number.size();
    20     for(int gap = length/2; gap > 0; gap /= 2)//gap是每组的步长
    21     {
    22         for(int i = 0; i < gap; i++) //i代表组数
    23         {
    24             for(int j = i; j < number.size(); j += gap)//此处开始插入排序
    25             {
    26                 for(int k = i; k < j; k += gap)//插入法此处是从前往后开始比较
    27                 {    
    28                     if(number[j] < number[k])    
    29                     {            
    30                         int temp = number[j];
    31                         for(int x = j; x > k; x -= gap)
    32                         {
    33                             number[x] =number[x- gap];
    34                         }
    35                         number[k] = temp;
    36                     }
    37         
    38                 }
    39             }
    40         }
    41     }
    42 }
    43 
    44 //直接插入法
    45 void insert(vector<int> &number)
    46 {
    47     for(int i = 1; i < number.size();i++)
    48     {
    49         for(int j = i - 1; j  >= 0; j--)
    50         {
    51             if(number[i] < number[j])
    52             {
    53                 int temp = number[i];
    54                 for(int x = i; x > j; x--)
    55                 {
    56                     number[x] = number[x - 1];
    57                 }
    58                 number[j] = temp;
    59             }
    60         }
    61     }
    62 }
    63 
    64 int main()
    65 {
    66     vector <int> number;
    67     srand((int)time(0)); //s随机数种子
    68     for(int i=0;i<10000;i++)
    69     {
    70         int num = rand() & 1000000;
    71         number.push_back(num);
    72     }
    73     cout << endl;
    74     showall(number);
    75     shellinsert(number);
    76     cout << endl;
    77     showall(number);
    78     system("pause");
    79     return 0;
    80 }
  • 相关阅读:
    adb
    js百分比
    隐私策略
    JSON.parse&JSON.stringify
    MVC内容backgroundimage: url('')问题
    mvc笔记
    winform路径
    配置
    邮件发送的原理
    如何调试Windows服务
  • 原文地址:https://www.cnblogs.com/zhizhi25/p/5729601.html
Copyright © 2011-2022 走看看