冒泡排序是一種較簡單的排序算法。它重復地走訪過要排序的元素列,依次比較兩個相鄰的元素,如果他們的順序錯誤就把他們交換過來。走訪元素的工作是重復地進行直到沒有相鄰元素需要交換,也就是說該元素已經排序完成。本文通過冒泡排序的方法對一個數組進行從大到小和從小到大的排序。
1. 從小到大的插入排序:
例如:給定整型數組a[8] = {6,5,3,1,8,7,2,4},排序后得到a[8] = {1,2,3,4,5,6,7,8}
void BubbleSort(int arr[], int n) { for(int i = 0; i < n - 1; i++) { for(int j = 0; j < n - i - 1; j++) { if(arr[j] > arr[j+1]) std::swap(arr[j],arr[j+1]); } } }
2. 從大到小的插入排序:
例如:給定整型數組a[8] = {6,5,3,1,8,7,2,4},排序后得到a[8] = {8,7,6,5,4,3,2,1}
void InverseBubbleSort(int arr[], int n) { for(int i = 0; i < n - 1; i++) { for(int j = n - 1; j > 0; j--) { if(arr[j] > arr[j - 1]) { std::swap(arr[j],arr[j-1]); } } } }
測試代碼:
//程序包含兩種冒泡排序算法 //從小到大的冒泡排序BubbleSort //從大到小的冒泡排序InverseBubbleSort #include <iostream> void BubbleSort(int arr[], int n); void InverseBubbleSort(int arr[], int n); void printArray(int arr[], int n); const int n = 8; int main(int argc, char **argv) { int a[n] = {6,5,3,1,8,7,2,4}; BubbleSort(a,n); std::cout << "從小到大的冒泡排序:\n"; printArray(a,n); int b[n] = {6,5,3,1,8,7,2,4}; InverseBubbleSort(b,n); std::cout << "從大到小的冒泡排序:\n"; printArray(b,n); return 0; } void BubbleSort(int arr[], int n) { for(int i = 0; i < n - 1; i++) { for(int j = 0; j < n - i - 1; j++) { if(arr[j] > arr[j+1]) std::swap(arr[j],arr[j+1]); } } } void InverseBubbleSort(int arr[], int n) { for(int i = 0; i < n - 1; i++) { for(int j = n - 1; j > 0; j--) { if(arr[j] > arr[j - 1]) { std::swap(arr[j],arr[j-1]); } } } } void printArray(int arr[], int n) { for(int i = 0; i < n; i++) { std::cout << arr[i] << " "; } std::cout << std::endl; }
輸出:
從小到大的冒泡排序: 1 2 3 4 5 6 7 8 從大到小的冒泡排序: 8 7 6 5 4 3 2 1