簡體   English   中英

快速排序代碼不適用於排序數組

[英]Quick sort code doesn't work for sorted array

#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;)

你錯過了=符號,所以少了一個比較。

代碼

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM