修改错误让程序实现冒泡功能,利用flag标志位减少循环次数

m0_56926947 2021-05-12 11:23:15
#include<iostream>
#include<iomanip>
using namespace std;
const int N=6;
void bubble_sort(int unsorted[],int n )//排序
{
int flag=0,m=0;
for (int i = 0; i <n-1; i++)
{
for (int j = 0; j < n-1-i; j++)
{
flag=0;
if (unsorted[j] > unsorted[j+1])
{
int temp = unsorted[j+1];
unsorted[j+1] = unsorted[j];
unsorted[j]=temp;
flag=1;
m++;
}
}
if(!flag) break;
}
cout<<"实际进行了"<<m<<"轮的相邻两个元素的比较交换"<<endl;
cout<<"增加flag标志位可减少"<<n-1-m<<"轮循环"<<endl;
}
void display(int x[],int n)
{
for (int i = 0; i <n; i++)
cout<<setw(5)<<x[i];
}
int main( )
{
int x[N] ;
for(int i=0;i<N;i++)
cin>>x[i];
cout<<"排序前的数据:"<<endl;
display(x,N);
cout<<endl;
bubble_sort(x,N);
cout<<"排序后的序列:"<<endl;
display(x,N);
cout<<endl;
return 0;
}
那个flag咋起作用的啊?
[code=c][code=c][code=c]
[/code][/code][/code]
...全文
97 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
qzjhjxj 2021-05-13
  • 打赏
  • 举报
回复
对冒泡排序常见的改进方法是加入一标志性变量flag,用于标志某一趟排序过程中是否有数据交换, 如果进行某一趟排序时并没有进行数据交换,则说明数据已经按要求排列好,可立即结束排序,避免不 必要的比较过程,可以节省时间。
源代码大师 2021-05-13
  • 打赏
  • 举报
回复
先做判断,再循环,可以减少循坏次数,望采纳,不懂的可以关注私信我。
qzjhjxj 2021-05-13
  • 打赏
  • 举报
回复
排序函数修改如下,供参考:
void bubble_sort(int unsorted[],int n )//排序
{
    int flag=0,m=0;
    for (int i = 0; i <n-1; i++)
    {
        flag=0;
        for (int j = 0; j < n-1-i; j++)
        {
            if (unsorted[j] > unsorted[j+1])
            {
                int temp = unsorted[j+1];
                unsorted[j+1] = unsorted[j];
                unsorted[j]=temp;
                flag=1;
            }
        }
        m++;
        if(!flag)  break;
    }
    cout<<"实际进行了"<<m<<"轮的相邻两个元素的比较交换"<<endl;
    cout<<"增加flag标志位可减少"<<n-1-m<<"轮循环"<<endl;
}

64,683

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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