1. 程式人生 > 實用技巧 >C++15 虛基類

C++15 虛基類

希爾排序

網上都講的很清楚了QAQ,所以直接貼俺的程式碼了QwQ

思路:gap=>排序=>gap=>排序

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int n,a[N];
void shell(int gap)
{
    if(gap<=0) return;
    for(int i=1;i<=gap;i++)
    {
        for(int j=i+gap;j<=n;j+=gap)
        {
            int cur=a[j],last_i=j-gap;//當前元素,上一元素的下標
            while(last_i>0)
            {
                if(cur<a[last_i])
                {
                    a[last_i+gap]=a[last_i];
                    last_i-=gap;
                }else break;
            }
            a[last_i+gap]=cur;
        }
    }
    // for(int i=1;i<=n;i++) cout<<a[i]<<" ";
    // printf("--希爾排序\n"); 
    shell(gap/2);
}
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
    }
    shell(n/2);
    for(int i=1;i<=n;i++) cout<<a[i]<<" ";
}
//10 
//8 9 1 7 2 3 5 4 6 0