
/* 双向冒泡排序: 所谓双向,即两个方向同时进行排序操作,可以在一定程度上降低时间开销。 从左向右大值往下沉,从右往左小值往上冒,只需要的遍历次数为元素个数的一半*/#include <stdio.h>#include <stdlib.h>void swap(int &a, int &b) { int tmp; tmp = a; a = b; b = tmp;}void BibubbleSort(int *arr, int len) { int low = 0, high = len - 1; int flag = 1; while (low < high && flag) {//循环条件 flag = 0;//标志本轮是否有操作 for (int j = low; j < high; j++) {//往下沉 if (arr[j] > arr[j + 1]) {//逆序则交换 swap(arr[j], arr[j + 1]); flag = 1; } } high--; for (int j = high; j > low; j--) {//往上冒 if (arr[j] < arr[j - 1]) {//逆序则交换 swap(arr[j], arr[j - 1]); flag = 1; } } low++; }}int main() { int arr[] = { 9,3,4,10,8,5,7,12,10,15 }; BibubbleSort(arr, 10); return 0;}