シェルソートを作っていて、なかなかうまくできません。
Let's sortとafterの間以外は問題ないと思ってます。
何か気づいた点不審な点あったら教えてください。
お願いします。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 8 /数字の数。2^nに限る。/
void swap(int *a,int *b)/2つの値を入れ替える関数/
{
int temp;
temp=*a; *a=*b; *b=temp;
}
void show(int box[],int n)/配列の中身をn個表示する関数/
{
int num;
for (num = 0; num<n; num++)
{
printf("%3d,", box[num]);
}
printf("\n");
}
void shuttle(int box[],int num)/挿入ソートを行う関数/
{
while ((num > 0) && (box[num-1] > box[num]))
{
swap(&box[num],&box[num-1]);
/show(box);/
num--;
}
}
int main(void)
{
int h,i,j;
int box[N];
int subbox[N];
int num
srand((unsigned)time(NULL)); printf("---before---\n"); for (num = 0; num<N; num++) { box[num] = (rand() % 500)+1; } show(box,N); printf("---Let's sort---\n"); for(h=N/2;h>0;h/=2) { for(j=0;j<h;j++) { for(i=j;i<N;i=i+h) { subbox[i/h]=box[i]; shuttle(subbox,i/h); box[i]=subbox[i/h]; show(subbox,N/h); } } } printf("---after---\n"); show(box,N); return(0);
}
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。