Ταξινόμηση - Sorting
Ταξινόμηση Φυσαλίδας – Bubble Sort Με την μέθόδο της ταξινόμησης φυσαλίδας μπορούμε να ταξινομήσουμε τα στοιχεία ενός μονοδιάστατου πίνακα σε αύξουσα ή σε φθίνουσα σειρά. Η μέθοδος βασίζεται σε αλλεπάλληλους ελέγχους και μετακινήσεις ώστε να μπουν τα στοιχεία στην σειρά.
Παράδειγμα (αύξουσα σειρά) 5 4 10 3 1 4 5 10 3 1 3 5 10 4 1 1 5 10 4 3 1 4 10 5 3 1 3 10 5 4 1 3 10 5 4 1 3 5 10 4 1 3 4 10 5 1 3 4 5 10
Πρόγραμμα σε C for(i=0;i<N-1;i++) for(k=i+1;k<N;k++) If (A[i]>A[k]){ temp=A[i]; A[i]=A[k]; A[k]=temp; }
Φθίνουσα Σειρά Στην φθίνουσα σειρά ο αλγόριθμος παραμένει ο ίδιος. Το μόνο που αλλάζει είναι ο έλεγχος. Από Α[i] >A[k] γίνεται: Α[i]<A[k]
Παράδειγμα 1 Να δημιουργήσετε το πρόγραμμα που διαβάζει 10 ακέραιους αριθμούς από το αρχείο par1.in και τους τυπώνει σε αύξουσα σειρά στο αρχείο par1.out
Παράδειγμα 1 #include<stdio.h> #define N 10 using namespace std; int main(){ int a[N], i , j, temp; FILE *fin,*fout; fin = fopen( "par1.in", "r" ); fout = fopen( "par1.out", "w" ); for(i=0;i<N;i++) fscanf(fin,"%d",&a[i]); for( i=0; i<N-1; i++ ) for( j=i+1; j<N; j++ ) if( a[i] > a[j] ) { temp = a[i]; a[i] = a[j]; a[j] = temp; } for( i=0; i<N; i++ ) fprintf( fout, "%d\n", a[i] ); fclose(fin); fclose(fout); return 0;
Παράδειγμα 2 Μέσα στο αρχείο par2.in υπάρχει ένας ακέραιος αριθμός Ν (0<Ν<=100) ακολουθούμενος από 2 στήλες. Στην πρώτη στήλη είναι ένας ακέραιος αριθμός που αντιστοιχεί στην ηλικία και στη δεύτερη το όνομα (μέχρι 30 χαρακτήρες). Να τυπώσετε στο αρχείο par2.out τα ονόματα ξεκινώντας από τον γηραιότερο.
Παράδειγμα 2 for(i=0;i<N-1;i++) for(j=i+1;j<N;j++) if(age[i]<age[j]){ t1=age[i]; age[i]=age[j]; age[j]=t1; strcpy(t2,name[i]); strcpy(name[i],name[j]); strcpy(name[j],t2); } for(i=0;i<N;i++) fprintf(fout,"%s\n",name[i]); fclose(fin); fclose(fout); return 0; #include<stdio.h> #include<string.h> using namespace std; int main(){ int age[100],i,j,t1,N; char name[100][30],t2[30]; FILE *fin,*fout; fin=fopen("par2.in","r"); fout=fopen("par2.out","w"); fscanf(fin,"%d",&N); for(i=0;i<N;i++){ fscanf(fin,"%d",&age[i]); fscanf(fin,"%s",name[i]); }
Παράδειγμα 3 Να δημιουργήσετε το πρόγραμμα που διαβάζει από το αρχείο par3.in έναν αριθμό Ν(0<Ν<=100) ακολουθούμενο από Ν ονόματα και τα τυπώνει με αλφαβητική σειρά στο αρχείο par3.out
Παράδειγμα 3 #include<stdio.h> #include<string.h> using namespace std; int main(){ int i,j,N; char name[100][30],t1[30]; FILE *fin,*fout; fin=fopen("par3.in","r"); fout=fopen("par3.out","w"); fscanf(fin,"%d",&N); for(i=0;i<N;i++) fscanf(fin,"%s",name[i]); for(i=0;i<N-1;i++) for(j=i+1;j<N;j++) if(strcmp(name[i],name[j])>0){ strcpy(t1,name[i]); strcpy(name[i],name[j]); strcpy(name[j],t1); } for(i=0;i<N;i++) fprintf(fout,"%s\n",name[i]); fclose(fin); fclose(fout); return 0;