Pas de dépendances
#include <stdio.h> #include <stdlib.h> int compint(const void* a,const void* b) { int* pa=(int*)a; int* pb=(int*)b; int ea=*pa; int eb=*pb; return ea-eb; } int main() { int nombres[5]; int i; printf("Entrez 5 nombres\n"); for(i=0;i<5;i++) scanf("%d",&nombres[i]); qsort(&(nombres[0]),5,sizeof(int),compint); printf("tri ok.\n"); for(i=0;i<5;i++) printf("%d\n",nombres[i]); return 0; }
qsort function can sort any contiguous array. qsort take 4 parameters. The first one is the adress a the array to sort. The second is the number of elements The third is the size of one element. The fourth is a function. This function will describe "how to know, for 2 given elements, which one is greater ?" This function has this signature : int compint(const void* a,const void* b) This is pure pointers : void* You have to cast these pointers into a pointer of your elements, then telling how to know whish is better. Let see the example : (compint mean "compare int") int compint(const void* a,const void* b) { int* pa=(int*)a; int* pb=(int*)b; int ea=*pa; int eb=*pb; return ea-eb; } First, I cast the pointers into int*, because my array is an array of int. Then I retrieve the int into ea and eb. Finally, how to know which int is greater ? Just make a substraction : if 0, it's equal, if result<0, then a<b, if result>0, then a>b.