求改进了的"冒泡排序法".

conchen 2003-10-15 01:44:41
谁能发一下.
...全文
58 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
挺拔的劲松 2003-10-15
  • 打赏
  • 举报
回复
http://paddy.myrice.com/program/43.htm
这里有详细的解绍。你可以看一下。
conchen 2003-10-15
  • 打赏
  • 举报
回复
thanks !
shanweibing 2003-10-15
  • 打赏
  • 举报
回复

同意: Hot_Forever(用钱砸死我吧)
我也只知道这两种改进方法。
daizh 2003-10-15
  • 打赏
  • 举报
回复
更正我上面的程序:
#include<iostream.h>
#define max 20 //最多记录个数
typedef int elemtype;
typedef elemtype recs[max];
void bibubble(recs r,int n)
{
int flag=1; //继续遍历时flag置1,已排好序不需遍历时为0
int i=0, j;
elemtype temp;
while(flag==1)
{
flag=0;
for(j=i+1;j<n-1;j++) //正向遍历找最大值
if(r[j]>r[j+1])
{
flag=1; //能交换时,说明未排好序,需继续
temp=r[j];
r[j]=r[j+1];
r[j+1]=temp;
}
for(j=n-i-1;j>=i+1;j--) //反向遍历
if(r[j]>r[j-1])
{
flag=1; //能交换时,说明未排好序,需继续
temp=r[j];
r[j]=r[j-1];
r[j-1]=temp;
}
i++;
}
}

void main()
{
recs A={2,5,3,4,6,10,9,8,7,1};
int n=10, i;
cout<<"双向冒泡排序"<<endl<<"排序前:";
for(i=0;i<n;i++)
cout<<A[i]<<"";
cout<<endl;
cout<<" 排序后: ";
bibubble(A,n);
for(i=0;i<n;i++)
cout<<A[i]<<"";
cout<<endl;
}
Hot_Forever 2003-10-15
  • 打赏
  • 举报
回复
[改进一]:若某次循环中没有数据交换
过,则可认为数据已经有序了,不必再进行
循环了。可在程序中设一变量Flag 用来标识
有无数据交换。sort(a,n)
int a[],n ;
{int i ,j ,t ,flag ;
for (i =n -2;i >0;i --)
{flag =0;
for(j =0;j <i ;j ++)
if(a[j]<a[j +1]){t =a[j];a[j]=a[j +1];
a[j +1]=t ;flag =1;}
if (flag ==0)break;
}}
 [改进二]:如果在一次循环中,最后
的某些元素没有交换过,则说明后面这些元
素的顺序已排序,下次循环可不对其进行比
较。本方法主要考虑要排序的数组元素的范
围,而不是每一轮排序都将数组元素的范围
减少1。
sort(a,n)
int a[],n ;
{int i ,j ,t ,k,flag ;
flag =n -1;
while (flag >0)
{k=0;
for(j =0;j <i ;j ++)
if(a[j]<a[j +1]){t =a[j];a[j]=a[j +1];
a[j +1]=t ;k=j ;}
flag =k;/*此处不填flag =
flag -1;
}}
River_H 2003-10-15
  • 打赏
  • 举报
回复
书上到处都是。
daizh 2003-10-15
  • 打赏
  • 举报
回复
双向冒泡排序
void Bubble2Sort(int* pData,int Count)
{
int iTemp;
int left = 1;
int right =Count -1;
int t;
do
{
//正向的部分
for(int i=right;i>=left;i--)
{
if(pData[i] {
iTemp = pData[i];
pData[i] = pData[i-1];
pData[i-1] = iTemp;
t = i;
}
}
left = t+1;

//反向的部分
for(i=left;i {
if(pData[i] {
iTemp = pData[i];
pData[i] = pData[i-1];
pData[i-1] = iTemp;
t = i;
}
}
right = t-1;
}while(left<=right);
}

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧