希尔排序

来源:互联网 发布:淘宝店铺更改为基础版 编辑:程序博客网 时间:2024/06/05 05:41

直接来代码:

// EX_EXAM.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>using namespace std;/*包含头文件*/#include<stdio.h>#include<stdlib.h>#define MaxSize 50typedef 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;}


 

 

原创粉丝点击