Ci-dessous le programme que j'ai écrit pour le tri d'un tableau sur la dernière colonne,

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <stdio.h>
#include <stdlib.h>
 
void print ( double a[][5], int n ) {
    int i;
    for ( i = 0 ; i < n ; i++ ) {
        printf( "%.f %.f %.3E %.3E %.3E \n", a[i][0], a[i][1],a[i][2],a[i][3],a[i][4]);
    }
    printf("--\n");
}
int compare ( const void *pa, const void *pb ) {
    double (*a)[5] = pa;
    double (*b)[5] = pb;
    if ( a[0][1] < b[0][1] ) return -1;
    if ( a[0][1] > b[0][1] ) return +1;
    return 0;
}
main() {
  double data[][5] = {
	  {37 , 1 , 8.360E-005 , 5.950E-006 , 3.241E-001},
	  {9  , 1 , 1.690E-004 , 6.020E-006 , 2.445E-001},
	  {20 , 1 , 1.640E-004 , 1.360E-005 , 2.645E-001},
	  {34 , 1 , 2.220E-004 , 7.900E-006 , 3.515E-001},
	  {49 , 1 , 7.530E-005 , 5.850E-006 , 3.541E-001},
	  {55 , 1 , 1.410E-004 , 9.590E-006 , 2.436E-003},
  };
 
  print( data, 6 );
  qsort( data, 6, sizeof data[0], compare );
  print( data, 6 );
  return 0;
}
le résultat obtenu est faux:

37 1 8.360E-005 5.950E-006 3.241E-001
9 1 1.690E-004 6.020E-006 2.445E-001
20 1 1.640E-004 1.360E-005 2.645E-001
34 1 2.220E-004 7.900E-006 3.515E-001
49 1 7.530E-005 5.850E-006 3.541E-001
55 1 1.410E-004 9.590E-006 2.436E-003
--
9 1 1.690E-004 6.020E-006 2.445E-001
20 1 1.640E-004 1.360E-005 2.645E-001
34 1 2.220E-004 7.900E-006 3.515E-001
49 1 7.530E-005 5.850E-006 3.541E-001
55 1 1.410E-004 9.590E-006 2.436E-003
37 1 8.360E-005 5.950E-006 3.241E-001
--
Appuyez sur une touche pour continuer...

Pouvez vous m'aider à corriger ce programme?
Merci