2015-06-29 3 views
1
#include<iostream> 
using namespace std; 
int swap(int *a,int i,int j) 
{ 
    int temp=a[i]; 
    a[i]=a[j]; 
    a[j]=temp; 
} 
int pivot(int *a,int low,int high) 
{ 
    int j,i=low-1,x=a[high]; 
    for(j=i+1;j<high;j++) 
    { 
     if(a[j]<x) 
      swap(a,j,++i); 
    } 
    swap(a,i,high); 
    return i; 
} 
int quick(int *a, int low, int high) 
{ 
    if(low<high) 
    { 
     int p=pivot(a,low,high); 
     quick(a,low,p-1); 
     quick(a,p+1,high); 
    } 
} 
int main() 
{ 
    int a[]={3,2,1,5,8,7,5,6,9,8},i; 
    quick(a,0,9); 
    for(i=0;i<10;i++) 
     cout<<a[i]<<" "; 
    return 0; 
} 

Не могли бы вы помочь мне выяснить, почему этот код не дает выход. Я пробовал свой уровень лучше всего выяснить, но я не понимаю, где ошибка. На мой взгляд, в коде есть небольшая ошибка.Ошибка в быстрой сортировке в C

ответ

0

Используйте это в вашей функции поворота перед возвращенным заявлением.

swap(a,++i,high); 

вместо

swap(a,i,high); 
+0

Я работал Большое спасибо. –

+0

В общем, вы должны стараться избегать побочных эффектов в аргументах вызова функции. (Например, вы никогда не знаете, когда одна из функций может быть реализована как макрос и функция.) –