#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代码适用于未排序的数组,但不适用于排序数组。我尝试改变分区功能但无济于事。对于数组已排序的情况,删除了分区中的交换,但是对于未排序的数组,它已被破坏。有人可以帮助解决这个问题吗?
答案 0 :(得分:2)