顺序表实现ShellSort

/*
	Author:Albert Tesla Wizard
	TIme:2020/11/22 15:07
*/
#include<bits/stdc++.h>
#define MAXSIZE 1000
using namespace std;
struct Sqlist
{
    
    
    int* elem;
    int length;
};
int create(Sqlist&L,int a[],int n)
{
    
    
    L.elem=new int[MAXSIZE];
    L.length=0;
    for(int i=0;i<n;i++){
    
    L.elem[i+1]=a[i];L.length++;}
}
void print(Sqlist L)
{
    
    
    for(int i=1;i<=L.length;i++)cout<<L.elem[i]<<" ";
    cout<<'\n';
}
int ShellInsert(Sqlist&L,int dk)
{
    
    
    int i,j;
    for(i=dk+1;i<=L.length;i++)
    {
    
    
        if(L.elem[i]<L.elem[i-dk])
        {
    
    
            L.elem[0]=L.elem[i];
            for(j=i-dk;j>0&&L.elem[0]<L.elem[j];j-=dk)
            {
    
    
                L.elem[j+dk]=L.elem[j];
            }
            L.elem[j+dk]=L.elem[0];
        }
    }
}
int ShellSort(Sqlist&L,int dk[],int t)
{
    
    
    for(int i=0;i<t;i++)ShellInsert(L,dk[i]);
}
int main()
{
    
    
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    Sqlist L;
    int a[11]={
    
    4,5,2,1,3,9,6,7,8,11,10};
    int dk[3]={
    
    5,3,1};
    create(L,a,11);
    print(L);
    ShellSort(L,dk,3);
    print(L);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/AlberTesla/article/details/109954359