数据结构——希尔排序(c++)

来源:互联网 发布:linux运维和java开发 编辑:程序博客网 时间:2024/06/08 11:51

ShellSorter.h

//ShellSorter.h//Shell排序类#include "Sorter.h"template <class Record>class ShellSorter:public Sorter<Record>{private:    // 针对变化的增量而修改的插入排序算法,参数delta表示当前的增量    void ModifiedInsertSort(Record Array[],int n,int delta);public:    void Sort(Record Array[],int n);};//Shell排序,Array[]为待排序数组,n为数组长度template <class Record>void ShellSorter<Record>::Sort(Record Array[], int n) {     int i,delta;    for(delta=n/2;delta>0;delta/=2)    {        for(i=0;i<delta;i++)        {            ModifiedInsertSort(&Array[i],n-i,delta);         }    }}// 针对变化的增量而修改的插入排序算法,参数delta表示当前的增量template <class Record>void ShellSorter<Record>::ModifiedInsertSort(Record Array[],int n, int delta) {    int i,j;    for(i=delta;i<n;i+=delta)    {        for(j=i;j>=delta;j-=delta)        {            if(Array[j]<Array[j-delta])                swap(Array,j,j-delta);            else                break;        }    }}

Sorter.h

//Sorter.h#if !defined(AFX_Sorter)#define AFX_Sorter//总排序类template <class Record>class Sorter{protected:    static void swap(Record Array[],int i,int j);   //交换数组中的两个记录public:    virtual void Sort(Record Array[],int n)=0;          //对数组Array进行排序    void PrintArray(Record array[], int n);     //输出数组内容};//交换数组中的两个记录template <class Record>void Sorter<Record>::swap(Record Array[],int i,int j){    Record TempRecord = Array[i];    Array[i] = Array[j];    Array[j] = TempRecord;}//输出数组内容template <class Record>void Sorter<Record>::PrintArray(Record Array[], int n){    for(int i=0;i<n;i++)        cout<<Array[i]<<" ";    cout<<endl;}  #endif

ShellSort.cpp

//ShellSort.cpp//Shell排序#include <iostream.h>#include <stdlib.h>#include <string.h>#include <time.h>#include "Sorter.h"#include "ShellSorter.h"const int N=1000;// 设定随即函数的种子inline void Randomize()   { srand(1); }//返回一个0到n-1之间的随机数inline int Random(int n)  { return rand() % (n); }void main(){    ShellSorter<int> s;    int Array[8];    for(int i=0;i<8;i++)    {        Array[i]=Random(50);    }    s.Sort(Array,8);    s.PrintArray(Array,8);}

这里写图片描述

0 0