You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行冒泡排序代码后输出原数组,如何修正以得到正确排序结果?

修正0和1排序代码,解决输出原数组的问题

你的代码无法实现排序的核心原因是赋值操作使用了错误的运算符,导致数组元素完全没有被修改。

问题定位

在sortzeroandones函数的交换逻辑中,你误将赋值运算符=写成了比较运算符==:

// 错误写法:仅做相等判断,未修改数组
arr[left]==0;
arr[right]==1;

==的作用是判断两个值是否相等,不会改变变量的值,所以数组始终保持原状态,输出自然和输入一致。

修正方案

  1. 将比较运算符==替换为赋值运算符=,完成数组元素的修改:
    arr[left] = 0;
    arr[right] = 1;
    
  2. (可选但推荐)替换非标准的变长数组:C++标准不支持int arr[n];这种写法,改用std::vector<int>更符合规范,避免潜在的兼容性问题。

修正后的完整代码

#include<bits/stdc++.h>
using namespace std;

void sortzeroandones(vector<int>& arr)
{
    int left=0, right=arr.size()-1;
    while(left < right)
    {
        while(arr[left]==0 && right>left)
            left++;
        while(arr[right]==1 && right>left)
            right--;
        if(left < right)
        {
            arr[left] = 0;
            arr[right] = 1;
            left++;
            right--;
        }
    }
}

int main(){
    int n;
    cin>>n;
    vector<int> arr(n);
    for(int i=0;i<n;i++){
        cin>>arr[i];
    }
    sortzeroandones(arr);
    
    for(int num : arr)
    {
        cout<<num<<" ";
    }
    
    return 0;
}

补充说明

如果你坚持使用数组而非vector,可以保留原函数参数写法,但要注意变长数组的兼容性问题,仅修改赋值运算符即可:

void sortzeroandones(int arr[],int n)
{
    // ... 其他逻辑不变
    if(left<right)
    {
        arr[left] = 0;
        arr[right] = 1;
        left++;
        right--;
    }
}

内容的提问来源于stack exchange,提问作者Raushan Kashyap

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 04:05:19