双向冒泡排序
#include<stdio.h>
#include<stdlib.h>
//双向冒泡排序
void Swap(int a[], int i, int j) {
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
void TW_Bubble_Sort(int a[], int n) {
int low = 0, high = n - 1;
bool flag = true;
while (low < high && flag) {
flag = false;
for (int i = low; i < high; i++)
if (a[i] > a[i + 1]) {
Swap(a,i,i+1);
flag = true;
}
high--; //特别注意low和high变化的时机:从前向后时,是最大的元素排好序,high--;从后向前是最小的元素排好序,low++
for (int j = high; j > low; j--)
if (a[j] < a[j - 1]) {
Swap(a, j, j - 1);
flag = true;
}
low++;
}
}