#include <stdio.h>
#include <stdlib.h>
#define MAX 1000
void sort(int n, int array[]) {
int i, j;
int tmp;
for (i = 0; i < n -1; i++) {
for (j = i + 1; j < n; j++) {
if (array[i] > array[j]) {
tmp = array[i];
array[i] = array[j];
array[j] = tmp;
}
}
}
}
int main(int argc, char *argv[]) {
int i, n, seed;
int ar[MAX];
if (argc <= 2) {
printf("引数が足りません\n%s 配列の数 乱数の種\n", argv[0]);
return 1;
};
n = strtol(argv[1], NULL, 10);
if (n > MAX) {
n = MAX;
}
seed = strtol(argv[2], NULL, 10);
srandom(seed);
for (i = 0; i < n; i++) {
ar[i] = random();
}
printf("配列に乱数をセットしました。\n");
for (i = 0; i < n; i++) {
printf("% 11d ", ar[i]);
if (i % 6 == 5) {
printf("\n");
}
}
printf("\n");
sort(n, ar);
printf("配列をソートしました。\n");
for (i = 0; i < n; i++) {
printf("% 11d ", ar[i]);
if (i % 6 == 5) {
printf("\n");
}
}
printf("\n");
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#define MAX 1000
void merge(int array[], int s1, int e1, int s2, int e2) {
int tmp[MAX / 2 + 1];
int i, j, k;
/* tmpにコピー */
for (i = 0; i <= e1 - s1; i++) {
tmp[i] = array[s1 + i];
}
for (i = 0, j = s2, k = s1; i <= e1 - s1 && j <= e2;) {
if (tmp[i] < array[j]) {
array[k++] = tmp[i++];
} else {
array[k++] = array[j++];
}
}
/* 余りの処理 */
while (i <= e1 - s1) {
array[k++] = tmp[i++];
}
}
void sort(int array[], int start, int end) {
int half;
if (start >= end) {
return;
}
half = start + (end - start) / 2;
sort(array, start, half);
sort(array, half + 1, end);
merge(array, start, half, half+1, end);
}
int main(int argc, char *argv[]) {
int i, n, seed;
int ar[MAX];
if (argc <= 2) {
printf("引数が足りません\n%s 配列の数 乱数の種\n", argv[0]);
return 1;
};
n = strtol(argv[1], NULL, 10);
if (n > MAX) {
n = MAX;
}
seed = strtol(argv[2], NULL, 10);
srandom(seed);
for (i = 0; i < n; i++) {
ar[i] = random();
}
printf("配列に乱数をセットしました。\n");
for (i = 0; i < n; i++) {
printf("% 11d ", ar[i]);
if (i % 6 == 5) {
printf("\n");
}
}
printf("\n");
sort(ar, 0, n - 1);
printf("配列をソートしました。\n");
for (i = 0; i < n; i++) {
printf("% 11d ", ar[i]);
if (i % 6 == 5) {
printf("\n");
}
}
printf("\n");
return 0;
}
物足りない人のために、構造体を使ったソーティングプログラムを挙げておきます。 通常、ソートでは並べ替えの順番を決めるキーとなる部分と、それ以外のデータの まとまりをソートします。
この例は、乱数とマージソートを使ってトランプのシャフルを行うプログラムです。
ダウンロード: sort-c.c