希尔排序

直接来代码:

// EX_EXAM.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
using namespace std;
/*包含头文件*/
#include<stdio.h>
#include<stdlib.h>
#define MaxSize 50
typedef int KeyType;
typedef struct /*数据元素类型定义*/
{
	KeyType key;/*关键字*/
}DataType;
typedef struct /*顺序表类型定义*/
{
	DataType data[MaxSize];
	int length;
}SqList;
void InitSeqList(SqList *L,DataType a[],int n);
void ShellInsert(SqList *L,int c);
void ShellInsertSort(SqList *L,int delta[],int m);
void DispList(SqList L,int n);

void ShellInsert(SqList *L,int c)
/*对顺序表L进行一次希尔排序,delta是增量*/
{
	int i,j;
	DataType t;
	for (i=1;i<=L->length-c;i=i+c)
	{
		if (L->data[i+c].key<L->data[i].key)
		{
			t=L->data[i+c];	
		for (j=i;j>0&&t.key<L->data[j].key;j=j-c)
		{
			L->data[i+c]=L->data[i];//移动	
		}
		L->data[j+c]=t;
		}
	}
}
void ShellInsertSort(SqList *L,int delta[],int m)
/*希尔排序,每次调用算法ShellInsert,delta是存放增量的数组*/
{
	int i;
	for (i=0;i<m;i++)
	{
		ShellInsert(L,delta[i]);
	}
}

void InitSeqList(SqList *L,DataType a[],int n)
/*顺序表的初始化*/
{
	int i;
	for(i=1;i<=n;i++)
	{
		L->data[i]=a[i-1];
	}
	L->length=n;

}
void DispList(SqList L,int n)
/*输出表中的元素*/
{
	int i;
	for(i=1;i<=n;i++)
		printf("%4d",L.data[i].key);
	printf("\n");
}

int _tmain(int argc, _TCHAR* argv[])
{
	DataType a[]={56,22,67,32,59,12,89,26,48,37};
	int delta[]={5,3,1};
	int i,n=10,m=3;
	SqList L;
	/*希尔排序*/
	InitSeqList(&L,a,n);
	printf("排序前:");
	DispList(L,n);
	ShellInsertSort(&L,delta,m);
	printf("希尔排序结果:");
	DispList(L,n);
	return 0;
}


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值