2017-10-03 9 views
-1

Je rencontre des problèmes lors de l'exécution de l'algorithme quicksort. Il s'agit d'une erreur que je suis en train de rencontrer mais je n'arrive pas à trouver l'origine du problème. si quelqu'un pourrait pointer où l'erreur est je serai merci.problème de mise en œuvre de quicksort

#include <stdio.h> 
#include <stdlib.h> 

void main(){ 
    int arr[] = {10, 7, 8, 9, 1, 5}; 
    int n = sizeof(arr)/sizeof(arr[0]); 
    quickSort(arr,0,n-1); 
    printArray(arr,0,n-1); 
} 

//Quicksort Function 
void quickSort(int arr[],int low,int high){ 
    if (low < high){ 

     int pi=partition(arr,low,high); 
     quickSort(arr,low,pi-1);//takes care of lower set of numbers 
     quickSort(arr,pi+1,high);//takes care of higher elements above pivot 
    } 
} 

//Function for partitioing, in my program i am cosidering pivot as the element at high or the last element 
int partition(int arr[],int low,int high){ 
    int i,j; 
    i=(low-1); 
    int pivot=arr[high]; 
    for(j=low;j<=high;j++){ 
     if(arr[j]<=pivot){ 
      i++; 
      swap(&arr[i], &arr[j]); 
     } 
    } 
    swap(&arr[i+1], &arr[high]); 
    return (i+1); 
} 

//function to print array 
void printArray(int arr[],int low,int high){ 
    int i; 
    for(i=low;i<=high;i++){ 
     printf("%d ",arr[i]); 
    } 
} 

//function to swap two elements of array 
void swap(int* a, int* b) 
{ 
    int t = *a; 
    *a = *b; 
    *b = t; 
} 
+1

Qu'est-ce que Erreur? Et formatez votre code. –

+0

Avez-vous essayé d'imprimer l'état des éléments à trier dans chaque itération de votre algorithme, et de comparer cela avec les résultats exacts lorsque vous effectuez le tri manuellement? Qu'avez-vous fait pour essayer de trouver l'erreur? SO n'est pas un débogueur pour vous. –

+0

Bienvenue sur stackoverflow.com. Veuillez prendre le temps de lire [les pages d'aide] (http://stackoverflow.com/help), en particulier les sections intitulées ["Quels sujets puis-je poser à propos d'ici?"] (Http://stackoverflow.com/help/ sur le sujet) et ["Quels types de questions devrais-je éviter de poser?"] (http://stackoverflow.com/help/dont-ask). Aussi s'il vous plaît [prendre la visite] (http://stackoverflow.com/tour) et [lire sur la façon de poser de bonnes questions] (http://stackoverflow.com/help/how-to-ask). –

Répondre

0

La simple mise en œuvre de QuickSort algorithme

void q_sort(int v[],int left,int right) 
{ 
    int i,last; 

    if(left>=right) 
    return; 

    swap(v,left,(left+right)/2); 
    last=left; 

    for(i=left+1;i<=right;i++) 
     if(v[i]<v[left]) 
     swap(v,++last,i); 

    swap(v,left,last); 
    q_sort(v,left,last-1); 
    q_sort(v,last+1,right); 
} 

void swap(int v[],int i,int j) 
{ 
    int temp; 
    if(i!=j){ 
     temp=v[i]; 
     v[i]=v[j]; 
     v[j]=temp; 
    } 
} 
0

Le problème est dans cette déclaration de votre partition() -

 if(arr[j]<=pivot){ 

Modifier à -

 if(arr[j]<pivot){