说明:双向冒泡排序即从前向后,相邻元素两两比较,得到最大值,放到序列的最后一个位置,这是第一趟排序;再从后向前,相邻元素两两比较,得到最小值,放到序列的第一个位置,这是第二趟排序…直至整个序列有序。
void BubleSort_Double(ElemType A[],int n)
{
int low=0; //下界
int high=n-1; //上界
bool flag; //标志域
while(low<high)
{
flag=false;
for(int i=low;i<high;i++) //从前向后两两比较
{
if(a[i]>a[i+1])
swap(a[i],a[i+1]);
flag=true;
}
high--; //上界减1(已经找到一个大元素放在后面的最终位置了)
if(flag==false) break;
flag=false;
for(int j=high;j>low;j--) //从后向前两两比较
{
if(a[j]<a[j-1])
swap(a[j-1],a[j]);
flag=true;
}
low++; //下界加1(已经找到一个小元素放在前面的最终位置了)
if(flag==false) break;
}
}