home *** CD-ROM | disk | FTP | other *** search
/ ftp.disi.unige.it / 2015-02-11.ftp.disi.unige.it.tar / ftp.disi.unige.it / pub / .person / CataniaB / teach-act / esempi / Ordinamenti / selSort.c < prev   
C/C++ Source or Header  |  1999-05-13  |  944b  |  41 lines

  1. /* selection sort - vedi dispense pag. 23 */
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5.  
  6. #define MAX 6
  7.  
  8. int main()
  9. {
  10.   float *a,aux;
  11.   int n,k,imin,i;
  12.  
  13.   printf("Quanti numeri (max %d)? ",MAX);
  14.   scanf("%d",&n);
  15.   
  16.   /* legge e memorizza in a */
  17.   n = n <= MAX ? n : MAX; /* fidarsi e' bene, non fidarsi ... */
  18.   a = (float*) malloc(sizeof(float)*n);
  19.   printf("Inserire %d numeri: ",n);
  20.   for(k = 0;k < n;k++) scanf("%f",&a[k]);
  21.   
  22.   /* ordina a */
  23.   for (k = 0;k < n-1;k++)
  24.     {
  25.       /* cerca il minimo in a tra k e n-1 */
  26.       imin = k;
  27.       for (i = k+1;i < n;i++) /* invariante: a[min]<=a[p] per k<=p<i */
  28.     if (a[i] < a[imin]) imin = i;
  29.       
  30.       /* scambio a[k] con a[imin] */
  31.       aux = a[k];
  32.       a[k] = a[imin];
  33.       a[imin] = aux;
  34.       /* invariante: a e` ordinato da 0 a k-1 e a[k-1]<=a[p] per k<=p<n-1 */
  35.     }
  36.  
  37.   /* stampa il risultato */
  38.   printf("\nRisultato:\n");
  39.   for(k = 0;k < n & k < MAX;k++) printf("%f\n",a[k]); 
  40. }
  41.