クイックソートのふくしゅう
#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; }
バグなしで一発で書くのはなんだかんだ難しいと思った。