#排序演算法#【1】概述、氣泡排序、選擇排序

範長法@三月軟體發表於2014-05-27

排序演算法分類:

  1. 內部排序(在排序過程中不需要訪問外存就可以完成排序)
  2. 外部排序
內部排序分類:
  1. 交換排序
    • 氣泡排序
    • 快速排序
  2. 選擇排序
    • 直接選擇排序
    • 堆排序
  3. 插入排序
    • 直接插入排序
    • 希爾排序
  4. 合併排序
外部排序:
     常見的是多路歸併演算法,即將原檔案分為多個能夠一次裝入記憶體一部分,分別把每一部分調入記憶體完成排序,然後對已經排序的子檔案進行歸併排序
 
 
氣泡排序法:

  氣泡排序法是一種相鄰資料交換的排序方法。
  氣泡排序法的基本思想是:對待排序記錄關鍵字從後往前(逆序)進行多遍掃描,當發現相鄰兩個關鍵字的次序與排序要求的規則不符時,就將這兩個記錄進行交換。這樣,關鍵字較小的記錄將逐漸從後面向前面移動,就象氣泡在水中向上浮一樣,所以該演算法也稱為氣泡排序法。
     
  核心程式碼如下:
//氣泡排序
//a  傳遞的要排序的陣列
//n  陣列元素的長度
void BubbleSort(int a[],int n){
    int i,j,temp;
    int flag = 0;
    for(i = 0 ; i < n ; i++){
        for(j = n - 1 ; j > i; j--){
            if(a[j] < a[j-1]){
                temp = a[j-1];
                a[j-1] = a[j];
                a[j] = temp;
                flag = 1;
            }
        }
        
       //如果一遍下來沒有資料交換,則不需要再繼續迴圈
        if(flag == 0)
            break;
        else
            flag = 0;
    }
}

 

 
簡單選擇排序法

  選擇排序的基本思想:對n個記錄進行掃描,選擇最小的記錄,將其輸出,接著在剩下的n-1個記錄中掃描,選擇最小的記錄將其輸出,不斷重複這個過程,直到只剩一個記錄為止。
 
  
 
  核心程式碼如下:
//簡單選擇排序
//a  要排序的陣列
//n  陣列的元素個數
void SelectSort(int a[],int n){
    int i,j,k,;
    int temp;

    for(i = 0 ; i < n-1 ; i++){
        k = i;   
        for(j = i+1 ; j < n ; j++){
            if(a[j] < a[k])
                k = j;
        }

        if(k != i){
            temp = a[i];
            a[i] = a[k];
            a[k] = temp;
        }

    }
}

 

  

相關文章