2016-06-24 55 views
0

您好我正在我的程序中使用排序算法。這是快速排序。餘與排序後的數組測試了它作爲遵循排序算法的C排序更改數組中的值

int arr[7] = {1,2,3,4,5,6,7}; 

代碼是

void sort(int arr[],int left,int right) 
{ 
    int i= left, j= right; 
    int pivot = arr[((left+right)/2)]; 
    int tmp=0; 


/* partition */ 
    printf("%d\n",arr[0]); 
    while(i<=j) 
    { 
     while(arr[i]<pivot) 
      i++; 

     while(arr[j]>pivot) 
      j--; 

     if(i<=j) 
     { 
     tmp = arr[i]; 
     arr[i] = arr[j]; 
     arr[j] = tmp; 
     i++; 
     j--; 
     } 


    }; 

/* recursion */ 

    if(left<j) 
     sort(arr,left,j); 
    if(i<right) 
     sort(arr,i,right); 

} 

當其返回它給ARR [0]的值爲0。其結果應爲1。

我在main裏面調用這個函數。下面是代碼調用排序

int main() 
{ 
    int i; 
    int arr[7] = {1,2,3,4,5,6,7};int max=0,min=0; 

    int len = (sizeof(arr)/sizeof(arr[0])); 

    printf("%d\n",arr[0]); 

    sort(arr,0,len); 

    printf("%d\n",arr[0]); 

    return 0; 
} 
+2

你能包括其中'排序()'叫什麼left'和'right'的'值是? – dckuehn

+0

我編輯了這個問題,並補充說。 – denis

回答

2

這是你的問題:

sort(arr,0,len); 

你傳遞的大小與最右邊的數組元素。這導致您讀取和寫入數組的末尾,導致undefined behavior

您需要在最右邊的元素的索引,這是少1傳:

sort(arr,0,len-1); 
1

的算法本身看起來不錯,但我認爲這是最好有在while循環<= pivot>= pivot

我能想到的唯一問題是您可以使用參數0和數組中元素的數量調用sort函數。但請注意這裏的right表示正確位置的索引,而不是後面。所以它應該是7sizeof(arr)/sizeof(arr[0])-1)