quick sort - tri rapide

quick sort - tri rapide - C - Programmation

Marsh Posté le 17-05-2007 à 15:01:15    

bonjour, je suis debutante en langage c, je suis en train de me casser la tete sur un programme de tri de tableau, je m'attaque au tri rapide (quick sort ) il y a tjs le meme erreur qui ressort et jarrive pas a trouver pourquoi ... pourriez vous m'aider ?? voila le code :
 

Citation :


#include <stdio.h>
#include <stdlib.h>
 
void swap (int array[], int size, int i,int j) {
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
 
void print_array ( int array[], int size) {
int j;
for (j=0;j<size;j++) printf( "  %d", array[j]);
}
 
void quicksort (int array[], int size)
{
qs(array,size,0,size-1);
}
 
void qs (int array[], int size, int i_start, int i_end)
{
int i_pivot;
if(i_start<i_end)
{
   i_pivot=partition(array,size,i_start,i_end);
   qs(array,size,i_start,i_pivot-1);
   qs(array,size,i_pivot+1,i_end);
}
}
 
int partition (int array[], int size, int i_start, int i_end)
{
int pivot=array[i_start];
int i=i_start, j=i_end;
while(1)
{
   while(array[j]>pivot) j--;
   while((array[i]<pivot)||((array[i]==pivot)&&(array[j]==pivot))) i++;
   if (i<j) swap(array,size,i,j);
   else return j;
}
}
 
 int main ()
 {
 int tab[10]={5,9,3,1,7,6,2,5,4,8};
 print_array(tab,10);
 printf("\n" );
 quicksort(tab,10);
 print_array(tab,10);
 printf("\n" );
 return 0;
 }


 
le message d'erreur est le suivant : type mismatch in redeclaration of 'qs'
 
merci

Reply

Marsh Posté le 17-05-2007 à 15:01:15   

Reply

Marsh Posté le 17-05-2007 à 15:09:40    

Utilise les balises cpp SVP.
L'rerreur est ici :

Code :
  1. void quicksort (int array[], int size)
  2. {
  3. qs(array,size,0,size-1);
  4. }
  5. void qs (int array[], int size, int i_start, int i_end)
  6. {
  7. int i_pivot;
  8. if(i_start<i_end)
  9. {
  10.    i_pivot=partition(array,size,i_start,i_end);
  11.    qs(array,size,i_start,i_pivot-1);
  12.    qs(array,size,i_pivot+1,i_end);
  13. }
  14. }


Tu parles de la fonction qs, dans la fonction quicksort, comme elle n'est pas déclarée, le compilateur suppose automatiquement qu'elle renvoie un int, alors évidemment comme après tu lui indique qu'elle est de type void, il râle, faut le comprendre.
Déclare ou définis d'abord ta fonction qs et la il sera content.


Message édité par Trap D le 17-05-2007 à 15:10:17
Reply

Marsh Posté le 17-05-2007 à 15:13:43    

Je pense que c'est parce que tu utilises qs avant de la déclarer. Dans ce cas le compilo suppose que la fonction retourne un int. L'appel de ta fonction est donc équivalent à une déclaration implicite : int qs(int[], int, int, int).
 
Un peu plus loin tu as la définition de la fonction, qui fait aussi office de déclaration, mais cette fois avec le prototype : void qs(int[], int, int, int). D'où le message qui t'averti que qs est redéclaré avec un type différent du type de la première déclaration (void au lieu de int).
 
Solution : déclare tes fonctions en début de fichier.
 
Edit : grillé, bien sûr.


Message édité par matafan le 17-05-2007 à 15:14:34
Reply

Marsh Posté le 17-05-2007 à 18:14:12    

oké, merci effectivement ca marche mieu comme ca !! merci beaucoup ! par contre je sais pas ce que c'est les balises ccp ...
 encore merci !

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed