看<<AtA>>,一道题.尾递归,循环换递归.思想很好,用处很大.
没有华丽的性能提高,只是展现尾递归的思想.确实,快速排序我还并未搞懂.先继续进行吧.
贴~
/* 2011-04-20-21.32.c -- 快速排序尾递归版 */ #include <stdio.h> #include <stdlib.h> #define SIZE (22) int main (void) ; void printArray (const int * const array, const int size) ; void swap (int * const left, int * const right) ; void qSort (int * const array, int left, const int right) ; void quickSort (int * const array, const int size) ; int main (void) { int array[SIZE] = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 55, 0, 77, 128, 66, 88, -1, 3, 45, 15, 77} ; int size = SIZE ; printArray (array, size) ; quickSort (array, size) ; printArray (array, size) ; return 0 ; } void printArray (const int * const array, const int size) { int i ; for (i = 0; i < size; i++) printf ("%d ", array[i]) ; putchar ('/n') ; } void swap (int * const left, int * const right) { int temp ; temp = *left ; *left = *right ; *right = temp ; } void qSort (int * const array, int left, const int right) { Item temp ; int i, j, pivot ; while (left < right) { i = left ; j = right - 1 ; pivot = right ; while (i < j) { while (i != right && array[i] <= array[pivot]) i++ ; while (j != left && array[j] > array[pivot]) j-- ; if (i < j) swap (array + i, array + j) ; else break ; } swap (array + i, array + pivot) ; quickSort (array, left, i - 1) ; left = i + 1 ; } } void quickSort (int * const array, const int size) { qSort (array, 0, size - 1) ; }