1. 程式人生 > >技術創造未來,程式改變生活。

技術創造未來,程式改變生活。

/*
氣泡排序基本思想
將n個記錄看作按縱向排列,每趟排序時自下至上對每對相鄰記錄進行比較,若次序不符合要求(逆序)就交換。每趟排序結束時都能使排序範圍內關鍵字最小的記錄象一個氣泡一樣升到表上端的對應位置,整個排序過程共進行n-1趟,依次將關鍵字最小、次小、第三小…的各個記錄“冒到”表的第一個、第二個、第三個… 位置上。


   初態      第1趟   第2趟  第3趟   第4趟   第5趟   第6趟   第7趟
       12      12      12      12      12      12      12                              
       38      20      20      20      20      20      20
       20      38      25      25      25      25      25
       46      25      38      38      38      38      38
       38      46      38      38      38      38      38
       74      38      46      46      46      46      46
       91      74      74      74      74      74      74
       25      91      91      91      91      91      91
*/
//列印陣列
void PrintArray(int  array[] , int n)
{


  int i;
  for(i=0;i<n;i++)
   printf(" %d ",array[i]);
  printf("\n");


}
//氣泡排序
void BubbleSort(int array[],int n)
{
    
    int i=0; 
    int j=0; 
    int temp=0;
    int flag = 0;
    for(i=0;i<n - 1 ;i++)   /*外迴圈控制排序的總趟數*/
    {
        flag = 0;   /*本趟排序開始前,交換標誌應為假*/
       for(j=n-1;j > i;j--) /*內迴圈控制一趟排序的進行*/ 
       {
           if(array[j] < array[j-1] ) /*相鄰元素進行比較,若逆序就交換*/
           {
             temp =array[j];
             array[j] = array[j-1];
             array[j-1] = temp;
             flag = 1;                  /*發生了交換,故將交換標誌置為真*/
           }
           
       }
        if (flag == 0)  /*本趟排序未發生交換,提前終止演算法*/
           break;
        /*
        printf("第%d趟排序結果: \n",i+1);
        PrintArray(array,n);
        */


       
      
    }
}




void TestBubbleSort()
{
    int array[8] ={38,20,46,38,74,91,12,25};
    BubbleSort(array,8);
    PrintArray(array,8);
}