希尔排序

来源:互联网 发布:取英文名的软件 编辑:程序博客网 时间:2024/05/23 11:51

给你10个指定的数字12,2,16,30,28,10,16,20,6,18,用希尔排序的方法把这十个数从小到大的排列

定义一个顺序表,对顺序表进行初始化赋值存入这十个数字,然后用希尔排序进行排序。希尔排序就是把这十个数每隔n个数的两个数分为一组,

n为变量,可以存在一个数组中,最后一个变量为1,这样把这十个数就分成了五个小组,然后在对每个组进行插入排序。

#include <iostream>
using namespace std;
#include "Sort.h"
int main()
{

   SqList S;
    int dt[]={5,3,1};
    cout<<"排序前:"<<endl;

 InitList(&S);
    PrintList(&S);
    cout<<"希尔排序:"<<endl;
    ShellSort(&S,dt,3);
    PrintList(&S);
    return 0;
}

#ifndef SORT_H_INCLUDED
#define SORT_H_INCLUDED
#define maxsize 100


typedef struct{
    int key;
    char otherinfo;
}Elemtype;


typedef struct SqNode{
    Elemtype *data;
    int length;
}SqList;


void InitList(SqList *S){ //初始化
    S->data=new Elemtype[maxsize+1];
    S->length=10;
    S->data[1].key=12;
    S->data[2].key=2;
    S->data[3].key=16;
    S->data[4].key=30;
    S->data[5].key=28;
    S->data[6].key=10;
    S->data[7].key=16;
    S->data[8].key=20;
    S->data[9].key=6;
    S->data[10].key=18;


}

void ShellInsert(SqList *S,int dk){
    int i,j;
    for( i=dk+1;i<=S->length;++i)
    if(S->data[i].key<S->data[i-dk].key){
        S->data[0].key=S->data[i].key;
        for( j=i-dk;j>0 && S->data[0].key<S->data[j].key;j-=dk)
            S->data[j+dk].key=S->data[j].key;
        S->data[j+dk].key=S->data[0].key;
    }
}


void ShellSort(SqList *S,int dt[],int t){   //希尔排序


    for(int k=0;k<t;k++)
    {


        ShellInsert(S,dt[k]);


    }


}
void PrintList(SqList *S)
{
    int i;
    for(i=1;i<=S->length;i++)
        cout<<S->data[i].key<<" ";
    cout<<endl;
}




#endif // SORT_H_INCLUDED

0 0