快排哪错了?

来源:百度知道 编辑:UC知道 时间:2024/06/27 19:43:20
//void QuickSort(long arr[8],long fromIndex,long toIndex)
//{
// long leftIndex,rightIndex,firstItem;
//
// if(fromIndex>=toIndex)return;
//
// leftIndex=fromIndex;
// rightIndex=toIndex;
// firstItem=arr[leftIndex];
//
// for(;;)
// {
// while(leftIndex<rightIndex&&arr[leftIndex]<=arr[rightIndex])rightIndex--;
// if(leftIndex<rightIndex){
// arr[leftIndex]=arr[rightIndex];
// leftIndex++;
// }else break;
//
// while(leftIndex<rightIndex&&arr[leftIndex]<=arr[rightIndex])leftIndex++;
// if(leftIndex<rightIndex){
// arr[rightIndex]=arr[leftIndex];
// rightIndex--;
// }else break;
// }
//
// arr[leftIndex]=firstItem;
//
// QuickSort(arr,fromIndex,leftIndex-1);
// QuickSort(arr,leftIndex+1,toIndex);
//}
我对jacksherry 和 chasePP 的回答不满意

正确的应该是这样你自己看吧
// quickSort.c
#include <stdio.h>

void quickSort( int[], int, int);
int partition( int[], int, int);

void main()
{
int a[] = { 7, 12, 1, -2, 0, 15, 4, 11, 9};

int i;
printf("\n\nUnsorted array is: ");
for(i = 0; i < 9; ++i)
printf(" %d ", a[i]);

quickSort( a, 0, 8);

printf("\n\nSorted array is: ");
for(i = 0; i < 9; ++i)
printf(" %d ", a[i]);

}

void quickSort( int a[], int l, int r)
{
int j;

if( l < r )
{
// divide and conquer
j = partition( a, l, r);
quickSort( a, l, j-1);
quickSort( a, j+1, r);
}

}

int partition( int a[], int l, int r) {
int pivot, i, j, t;
pivot = a[l];
i = l; j = r+1;

while( 1)
{