c - 快速排序代码不适用于排序数组

标签 c arrays sorting quicksort

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

最佳答案

partition中,将for循环改为

for(left=l+1,right=r;left<=right;)

您错过了 = 符号,因此少了一次比较。

Code .

关于c - 快速排序代码不适用于排序数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23723340/

相关文章:

c++ - 为什么 for 循环的条件是可选的,而 while 循环的条件不是可选的?

带模式或格式的 C scanf

jquery - 无法使用数据表停止初始排序

java - 使用合并排序与自定义排序对数组列表进行排序

C++: Scott Meyers "Effective STL": item 31: know your sorting options: 帮助理解

c - 从 C 中的文件读取时使用 fscanf()

c - 如何在 Linux 上调试内存覆盖

c - C中的整数SIMD指令AVX

c# - 使用 LINQ 将 List<string> 与 List<object> 匹配?

java递归: best collection of numbers