#include<stdio.h>
void swap(int *a, int *b){
int temp = *a;
*a=*b;
*b=temp;
}
int partition(int arr[], int l, int r){
int pivot = arr[l];
int left,right;
for(left=l+1,right=r;left<right;){
if(arr[left]>pivot && arr[right]<=pivot){
swap(&arr[left],&arr[right]);
}
if(arr[left]<=pivot)
left++;
if(arr[right]>pivot)
right--;
}
swap(&arr[l],&arr[right]);
return right;
}
void quicksort(int arr[], int l, int r){
int p;
if (l < r){
p = partition(arr,l,r);
quicksort(arr,l,p-1);
quicksort(arr,p+1,r);
}
}
int main(){
int i,size;
// int arr[] = { 10, 20, 7 , 5, 24 , 17, 13, 56, 38, 12 , 29, 46};
// int arr[] = {0,2,2};
int arr[] = {2,2,1,0};
size = sizeof(arr)/sizeof(arr[0]);
printf("The array before sorting is --->");
for(i=0;i<size;i++){
printf("--->%d",arr[i]);
}
printf("--->END\n\n");
quicksort(arr,0,size-1);
printf("The array after sorting is --->");
for(i=0;i<size;i++){
printf("--->%d",arr[i]);
}
printf("--->END");
}
上面的quciksort代碼適用於未排序數組,但不適用於排序數組。我試圖改變分區功能,但無濟於事。如果數組已排序,但未排序的數組已被破壞,則分區中的交換已被刪除。有人可以幫助解決這個問題嗎?快速排序代碼不適用於排序陣列
「不起作用」不適用於我。 –