快排哪错了?
来源:百度知道 编辑: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 的回答不满意
//{
// 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)
{