主题:关于冒泡排序的 一些改进算法
xixikeer
[专家分:0] 发布于 2010-03-08 13:15:00
拜托大家帮帮忙,关于冒泡排序算法的改进算法,双向冒泡排序,标志变量法排序,双冒泡排序,这三种算法的实例~~~~本人不太懂。。。[em11] 希望哪位高手帮帮忙~~
回复列表 (共6个回复)
沙发
miaoyong [专家分:760] 发布于 2010-03-08 20:36:00
你搜一下,我有发过这样 的贴!
板凳
雪光风剑 [专家分:27190] 发布于 2010-03-09 09:24:00
baidu上还是有的,你可以先找代码,然后找人给你讲,实在看不懂可以发帖说明你看不懂哪一段。
不要说整个程序都看不懂,那样你的动机会被怀疑的
3 楼
miaoyong [专家分:760] 发布于 2010-03-09 12:05:00
我三年前写的,你参考一下!
#include <iostream>
#include <stdlib.h>
#include <cstring>
#include <string.h>
using namespace std;
int main()
{
int i=0,j=0,k=0,a=0,b=0,n=0,m=0,sum=0,array1[256]={0,0},up=0,down=0;
char message[10]="Y",mode='o';
cout<<"这是一个升序/降序排序法;输入一组整数进行升序/降序排序,并输出!\n";
while(1)
{
cout<<"请输入一个整数!指定要输入数组的大小!\n";
cin>>n;
cout<<"请输入一组整数!小于65535的整数\n";
for(i=0;i<n;i++)
{
cin>>array1[i];
}
for(i=0;i<n;i++)
{
cout<<" "<<array1[i];
}
cout<<'\n';
cout<<'\n';
cout<<"请输入'u',为升序排列,请输入'd',为降序排序"<<'\n';
cin>>mode;
switch(mode)
{
case 'u': sum=1;
break;
case 'd': sum=2;
break;
default: cout<<" endd"<<mode<<endl;
}
cout<<"sum="<<sum<<" n="<<n<<'\n';
if(sum==2)
{
for(i=0;i<n;i++)
{
for(j=n-1;j>i;j--)
{
if(array1[j]>array1[j-1])
{
down=array1[j-1];
array1[j-1]=array1[j];
array1[j]=down;
}
}
for(m=0;m<n;m++)
{
cout<<" "<<array1[m];
}
cout<<'\n';
}
}
if(sum==1)
{
for(a=0;a<n;a++)
{
for(b=n-1;b>a;b--)
{
if(array1[b]<array1[b-1])
{
up=array1[b];
array1[b]=array1[b-1];
array1[b-1]=up;
}
}
for(m=0;m<n;m++)
{
cout<<" "<<array1[m];
}
cout<<'\n';
}
}
cout<<endl<<endl<<endl;
if(n>0)
{
for(i=0;i<8;i++)
cout<<" "<<array1[i];
}
cout<<'\n';
if(n>8)
{
for(i=1;i<n/8;i++)
{
for(j=0;j<8;j++)
{
cout<<" "<<array1[8*i+j];
}
cout<<'\n';
}
}
if(n>8 && n%8!=0)
{
if(n>16)
{
for(m=1;m<=n%8;m++)
cout<<" "<<array1[8*i+j+m];
}
else if(n<=16 && n>8)
{ for(m=0;m<n%8;m++)
cout<<" "<<array1[8+m];
}
}
cout<<'\n';
cout<<"是否继续? Y/N!"<<'\n';
cin>>message;
if(!strcmp(message,"n") || !strcmp(message,"N"))
{
break;
}
for(k=0;k<256;k++)
{array1[k]=0;
}
}
cout<<endl;
system("pause");
return 0;
}
4 楼
雪光风剑 [专家分:27190] 发布于 2010-03-09 13:57:00
ls程序尚待改进之处:
对n缺少入参检验……
大量混用了c风格和c++风格换行……
sum作为一个中间变量进行了无意义的输出
定义了过多的循环变量,C++风格可以利用循环内有效地变量声明方式来减少变量声明数
最后,这个程序只是一个普通的冒泡……不符合lz的需求……
挑毛病完毕,并且表扬ls的分享精神
5 楼
miaoyong [专家分:760] 发布于 2010-03-10 10:04:00
呵呵,是的这样的排序程序显然不符合C++ 编写习惯!这是我初学C++ 时写的,仅供参考!不精,无用的代码太多,优化一下可能要减少1半的代码量,但基本原理是相通的!做参考还是可以的!
6 楼
xixikeer [专家分:0] 发布于 2010-05-29 13:45:00
谢谢~~~虽然 我的问题已经解决了~ 还是非常感谢~[em11]
我来回复