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

    希尔排序是直接插入排序的一种改进(可是我觉得有点冒泡排序的意思),因为插入排序当数列越整齐则越容易进行排序列,而希尔排序就是将数列慢慢的化为更整齐的数列。

    每次对间隔为q[i]的数据进行插入排序,不过最后一个q[i]一定是1,因为我是使用的动态数组进行完成的,所以是递增数列。

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=1001;
    void shellsort(int a[],int i,int n); //对间隔为q[i]的子列进行插入排序
    void creat(int n); //创造间隔数组,其实只要最后一个是1就可以较高效率地完成排序 ,不过q[i]=3*q[i]+1;是效率较高的一个,复杂度为O(n^1.25)
    vector<int>q;
    int main()
    {
    int n,a[maxn];
    cin>>n;
    for(int i=0;i<n;i++)
    scanf("%d",&a[i]);
    creat(n);
    for(int i=q.size()-1;i>=1;i--)
    shellsort(a,i,n);
    for(int i=0;i<n-1;i++)
    cout<<a[i]<<" ";
    cout<<a[n-1]<<endl;
    }
    void shellsort(int a[],int i,int n)
    {
    for(int j=q[i];j<n;j++)
    {
    int k=j-q[i];
    if(a[k]>a[j]) swap(a[k],a[j]);
    }
    }
    void creat(int n)
    {
    for(int i=1;;)
    {
    if(i>n) break;
    else
    q.push_back(i),i=3*i+1;
    }
    }

  • 相关阅读:
    判断touchmove上下的方向
    this的指向
    JS 判断浏览器是否安装Flash 兼容IE、firefox
    Array类型
    addEventListener()与removeEventListener()
    tap 点透问题
    ts 接口
    ts 类型断言
    ts学习
    vue时间戳转换(10位数)/(13位)
  • 原文地址:https://www.cnblogs.com/sunjianzhao/p/11331483.html
Copyright © 2011-2022 走看看