FLYING

/* TODO: 気の利いた説明を書く */

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

#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;
}

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