希尔排序
来源:互联网 发布:取英文名的软件 编辑:程序博客网 时间: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
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 求三角形
- Android studio如何拆分编辑器窗口
- MarkDown 简书上传图片尺寸设置
- C#超基础:用方法判断闰年
- SSH异常解决
- 希尔排序
- 算法-三角剖析(UnityC#版-其他语言稍作修改)
- 坚持#第94天~越挫越勇!
- Eclipse juno不显示AVD及SDK Manager的菜单
- 03-javascript数组对象
- REST构架风格介绍之一:状态表述转移
- android仿QQ优雅的修改App字体大小
- J2EE资源下载、JAR包下载以及学习内容参考
- 左侧菜单+正文Fragment的基类