看<>,一道题.尾递归,循环换递归.思想很好,用处很大.
没有华丽的性能提高,只是展现尾递归的思想.确实,快速排序我还并未搞懂.先继续进行吧.
贴~
/*2011-04-20-21.32.c -- 快速排序尾递归版*/
#include
#include
#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) ;
}