双向冒泡排序
2016-01-22 21:53
381 查看
#include<iostream>
using namespace std;
int main()
{
int a[100],i,n;
cin>>n;
for(i=0; i<n; i++)
cin>> a[i];
int low, high,lastSwapPos,temp,cnt;
low = 0;
high = n - 1;
while (low < high)
{
lastSwapPos = high; //设置未排序序列的最后一个元素位置
for (i=low; i<lastSwapPos; i++)
{
cnt++;
if (a[i]>a[i+1])
{
temp = a[i];
a[i] = a[i+1];
a[i+1] = temp;
high = i; //记录交换位置
}
}
if (lastSwapPos == high) //若未进行交换操作,说明排序已经完成
break;
lastSwapPos = low; //设置未排序序列的第一个元素位置
for(i=high;i>lastSwapPos;i--)
{
if(a[i-1]>a[i])
{
temp=a[i-1];
a[i-1]=a[i];
a[i]=temp;
low=i;
}
}
if (lastSwapPos == low) //若未进行交换操作,说明排序已经完
break;
}
for(i = 0; i<n; i++)
cout<<a[i]<<" ";
cout<<endl;
return 0;
}
using namespace std;
int main()
{
int a[100],i,n;
cin>>n;
for(i=0; i<n; i++)
cin>> a[i];
int low, high,lastSwapPos,temp,cnt;
low = 0;
high = n - 1;
while (low < high)
{
lastSwapPos = high; //设置未排序序列的最后一个元素位置
for (i=low; i<lastSwapPos; i++)
{
cnt++;
if (a[i]>a[i+1])
{
temp = a[i];
a[i] = a[i+1];
a[i+1] = temp;
high = i; //记录交换位置
}
}
if (lastSwapPos == high) //若未进行交换操作,说明排序已经完成
break;
lastSwapPos = low; //设置未排序序列的第一个元素位置
for(i=high;i>lastSwapPos;i--)
{
if(a[i-1]>a[i])
{
temp=a[i-1];
a[i-1]=a[i];
a[i]=temp;
low=i;
}
}
if (lastSwapPos == low) //若未进行交换操作,说明排序已经完
break;
}
for(i = 0; i<n; i++)
cout<<a[i]<<" ";
cout<<endl;
return 0;
}
相关文章推荐
- Spark Streaming 的玫瑰与刺
- 三个Button onClick 事件
- Guava文档翻译之 Service
- 使用约束达到cell的自定义高度
- Spark 动态资源分配(Dynamic Resource Allocation) 解析
- Apache Spark探秘:三种分布式部署方式比较
- Hadoop单机学习环境配置
- c语言头文件
- 全错位排列
- 详细介绍安装CocoaPods步骤
- iOS开发:Block作为返回值时的使用
- PL/SQL显式游标的基本用法
- JavaScript 冒号(:)详解
- 静态成员与友元函数
- opencv 错误(二)
- 学习Slim Framework for PHP v3 ( 二)
- C#--SelectedIndexChanged事件, SelectedValueChanged事件和SelectionChangeCommitted事件的区别及联系
- Android ANR 分析解决方法
- the first QT
- 用指针输出,做形参