シェルソートによってデータを昇順にソートするプログラム
Posted: 2016年9月01日(木) 21:52
c言語初心者です。ソートした結果が正しくならなくて困っています。
シェルソートで、ランダムな200個のデータを昇順に並べたいのですが、結果に負の数がたくさん出てきます。
どう直したらよいのでしょうか?
Visual Studioを使っています。
回答お待ちしてます。よろしくお願いします。
シェルソートで、ランダムな200個のデータを昇順に並べたいのですが、結果に負の数がたくさん出てきます。
どう直したらよいのでしょうか?
Visual Studioを使っています。
回答お待ちしてます。よろしくお願いします。
#include<stdio.h>
#include<stdlib.h>
int main(void) {
int i, j,k,l;
int a = 200, num = 0;
int test[1000];
printf_s("処理する200個のデータは以下の通り。\n\n");
for (k = 0; k < 200; k++) {
test[k] = rand();
printf_s("%d ", test[k]);
}
printf_s("\n\n\n");
while (a != 1) {
if (a % 2 == 1) {
a = a / 2;
for (i = 0; i < a + 1; i++) {
if (test[i] > test[i + a]) {
num = test[i];
test[i] = test[i + a];
test[i + a] = num;
for (j = i - a; j < a; j -= a) {
if(test[j+a]<test[j]){
num = test[j];
test[j] = test[j+a];
test[j+a] = num;
}
else break;
}
}
}
}
else if (a % 2 == 0) {
a = a / 2;
for (i = 0; i < a; i++) {
if (test[i] > test[i + a]) {
num = test[i];
test[i] = test[i + a];
test[i + a] = num;
for (j = i-a; j < a; j-=a) {
if (test[j+a] > test[j]) {
num = test[j];
test[j] = test[j+a];
test[j+a] = num;
}
else break;
}
}
}
}
}
printf_s("昇順にソートしたデータは以下の通り。\n\n");
for (l = 0; l < 200; l++) {
printf_s("%d ", test[l]);
}
return 0;
}