読者です 読者をやめる 読者になる 読者になる

FLYING

〈全日本・紀文豆乳飲料シリーズ「麦芽コーヒー」の500ミリリットルパックを扱う小売店が少ないことに遺憾の意を表明する会〉活動記録

クイックソートのふくしゅう

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 10

void quick_sort(int *array, int left, int right)
{
	int x = left;
	int y = right;
	int pivot = array[(left+right)/2];
	if (left >= right) {
		return;
	}
	while (x <= y) {
		while (x <= right && array[x] < pivot) {
			x++;
		}
		while (y >= left && array[y] > pivot) {
			y--;
		}
		if (x <= y) {
			int tmp;
			tmp = array[x];
			array[x] = array[y];
			array[y] = tmp;
			x++; y--;
		}
	}
	quick_sort(array, left, x-1);
	quick_sort(array, x, right);
}

void debug(int *array, int len)
{
	int i;
	for (i=0;i<len;i++) {
		printf("%d", array[i]);
		if (i == len-1) {
			printf("\n");
		} else {
			printf(", ");
		}
	}
}

int main(void)
{
	int i;
	int *array;
	srand(time(NULL));
	array = malloc(N * sizeof(int));
	for (i=0;i<N;i++) {
		array[i] = rand();
	}
	debug(array, N);
	quick_sort(array, 0, N-1);
	debug(array, N);
	free(array);
	return 0;
}

バグなしで一発で書くのはなんだかんだ難しいと思った。