如果要對陣列的元素們進行排序,最簡單的是氣泡排序法(bubble sort)。 以由小排到大來說,最小的值會像氣泡一樣,慢慢的往上浮。 實例可以參考這個影片,程式則如下:
#include <stdio.h> #define SIZE 10 void bubbleSort(int a[], int size){ int i, j, temp; for(i=size-1;i>=0;i--){ for(j=0;j<i;j++){ if(a[j]>a[j+1]){ /* 如果前面大於後面,則交換 */ temp = a[j]; a[j] = a[j+1]; a[j+1] = temp; } } } } int main() { int i; int a[SIZE] = {3,0,1,8,7,2,5,4,6,9}; bubbleSort(a, SIZE); for(i=0;i<SIZE;i++){ printf("%d ",a[i]); } printf("\n"); return 0; }第一回合中,i=9,j 會從 0 跑到 8,所以可以讓最大的元素像消波塊一樣下沉。 依此類推,每一回合可以讓該回合最大的元素下沉,則跑完n次以後,陣列就完成排序。比氣泡排序法稍微有效率的,是插入排序法(insertion sort)。 此方法的原理是,假設前 n 個元素已經排序好,再將第 n+1 個元素插入到正確的位置。 雖然一樣需要兩層迴圈,但是因為記憶體存取的方式不同,所以執行效能較高:
#include <stdio.h> #define SIZE 10 void insertionSort(int a[], int size){ int i, j, temp; for(i=1;i<size;i++){ temp = a[i]; j = i - 1; while(j>=0 && a[j]>temp){ a[j+1] = a[j]; j--; } a[j+1] = temp; } } int main() { int i; int a[SIZE] = {3,0,1,8,7,2,5,4,6,9}; insertionSort(a, SIZE); for(i=0;i<SIZE;i++){ printf("%d ",a[i]); } printf("\n"); return 0; }若對其他排序方法有興趣, 可以參考 15 Sorting Algorithms in 6 Minutes 這個影片。