シェルソートプログラムについて
Posted: 2011年12月14日(水) 13:24
C++でソートアルゴリズムの速度を調べるプログラムを作成しようと思い、ソートごとにクラスを分けてプログラムを作ってテストしてみたのですが、シェルソートが正しく並べ変わらないです。ソート対象のデータ生成や交換の部分はほかのクラスで使っていて問題なかったのでおかしいのはこのクラスの中だけだと思います。
どこがおかしいのか解答お願いします。
開発環境 Visual C++2010
どこがおかしいのか解答お願いします。
#pragma once
#include "timer.h"
#include "Swap.h"
#include "Etc.h"
#include <math.h>
#include <malloc.h>
class ShellSort
{
public:
ShellSort();
virtual~ShellSort();
void Sh_Sort(int data[]);
};
ShellSort::ShellSort(){}
ShellSort::~ShellSort(void){}
void ShellSort::Sh_Sort(int data[])
{
Swap Sh_swap;
Etc Sh_etc;
timer Sh_timer;
Sh_etc.create_data(data);
Sh_etc.disp(data);
Sh_timer.timer_start();
int t = (int)log((double)DATA_NUM) / log(2.0);
int *Seq=(int*)malloc(sizeof(int)*t);
if(Seq==NULL)
{
std::cout<<"Memory Error"<<std::endl;
}
memset(Seq,0,t*sizeof(int));
Seq[t]=1;
for(int i=t;i>0;i--)//間隔定義
{
Seq[i-1]=(2*Seq[i]+1);
}
for(int i=0;i<=t;i++)//ソート
{
for(int j=Seq[i];j<DATA_NUM;j++)
{
int h=j;
if(h>=Seq[i]&&data[h-Seq[i]]>data[h])
{
Sh_swap.Pre_Swap(data[h-1],data[h]);
h-=Seq[i];
}
}
}
Sh_timer.timer_stop();
Sh_etc.disp(data);
Sh_timer.disp_timer();
free(Seq);
}