知識社群登入
位置: AutoCAD開放式教學 > 討論區 > 討論
比較 精簡的 bubble- sort
1樓
#include <cstdlib>
#include <iostream>

using namespace std;

// gen_data(a, n, max);
void gen_data(int a[], int n, int max)
{
     int i;
     
     for (i=0;i<n;i++) {
         a[i]= rand()%max;
     }
}// end of gen_data()
// --------------------------------------------------------
 
// show_data(a, n);
void show_data(int a[], int n)
{
     int i;
     printf("\n");
     
     for (i=0;i<n;i++) {
         printf("%3d, ", a[i]);
     }
     printf("\n");
     system("pause");
}// end of show_data()
// --------------------------------------------------------

// swap2(a[j], a[k]);
template <class T>
void swap2(T &a, T &b)
{
     T temp;
     
     temp= a;
     a= b;
     b= temp;
}// end of swap2()
// --------------------------------------------------------

// bubble_sort(a, n);
void bubble_sort(int a[], int n)
{
     int i, j, k;
     
     // do the sort n- times
     for (i=1;i<=n;i++) {
         // for each time
         printf("\n\n i= %d\n", i);
         
         for (j=0;j<=(n-2);j++) {
             k= j+1;// next item after a[j]
             
             // we hope a[j] <= a[k]
             if (a[j] > a[k]) {
                      printf("do the swap of a[j]= %d, a[k]= %d\n", a[j], a[k]);
                      swap2(a[j], a[k]);
             }
             // show_data(a, n);
         }
         
         show_data(a, n);
     }
}// end of bubble_sort()
// --------------------------------------------------------

// check_data(a, n);
void check_data(int a[], int n)
{
     int i, j;
     
     for (i=0;i<=(n-2);i++) {
         j= i + 1;
         
         // we hope a[i] <= a[j]
         if (a[i] > a[j]) {
                  printf("\n *** error of data check, \n");
                  printf("a[i]= %d, a[j]= %d\n", a[i], a[j]);
                  system("pause");
         }
     }
 }// end of check_data()
// --------------------------------------------------------

// test the bubble sort
int main(int argc, char *argv[])
{
    int a[1024], n, max;
    n= 10;
    max= 100;
    
    // initial data
    srand((unsigned) time(NULL));
    // srand(123);
    
    // generate test data
    gen_data(a, n, max);
    
    // show data
    show_data(a, n);
    
    // do the bubble sort
    bubble_sort(a, n);
    printf("\n end of bubble sort\n");
    system("pause");
    
    // check result
    // a[5]= 999;
    check_data(a, n);
    printf("\n end of data check\n");
    system("pause");
    
    // show data
    show_data(a, n);
    system("PAUSE");
    
    return EXIT_SUCCESS;
}// end of main()
// --------------------------------------------------------