冒泡排序是一种较简单的排序算法。它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素已经排序完成。本文通过冒泡排序的方法对一个数组进行从大到小和从小到大的排序。
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