C++ C++;气泡数组指定-添加标记以显示更改

C++ C++;气泡数组指定-添加标记以显示更改,c++,arrays,bubble-sort,C++,Arrays,Bubble Sort,我在大学里被分配了一个任务,任务的一部分是使用冒泡排序向数组中移动的元素添加星号(*)。我尝试了一些不同的方法来让它工作,但没有任何结果。以下是对我的特别要求: “5.创建一个额外的布尔数组(数组中的每个元素一个),以便 元素在一个循环中循环更改,布尔值更改为true,这些元素 被星号(*)包围显示,以表明已发生更改。然后 将布尔数组重置为false,为下一个循环做好准备。请记住,您需要 测试布尔值以决定是否输出星号“ 这是我的密码: int main() { double Number

我在大学里被分配了一个任务,任务的一部分是使用冒泡排序向数组中移动的元素添加星号(
*
)。我尝试了一些不同的方法来让它工作,但没有任何结果。以下是对我的特别要求:

“5.创建一个额外的布尔数组(数组中的每个元素一个),以便 元素在一个循环中循环更改,布尔值更改为true,这些元素 被星号(
*
)包围显示,以表明已发生更改。然后 将布尔数组重置为false,为下一个循环做好准备。请记住,您需要 测试布尔值以决定是否输出星号“

这是我的密码:

int main()
{
    double Numbers[NMAX] = {31.2, 29.7, 53.5, 69.0, 23.7, 71.8, 49.3, 52.9, 51.3, 57.1};
    bool change[NMAX] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };

    // note this top counter, i, counts down
    int counter = 0;
    for (int i=NMAX-1; i>0; i--)
    {
        //and this counter, j, only goes as far as the current i value 
        // it means it doesn't go over the elements that have already 'bubbled up' to the end of the array
        for (int j=0; j<i; j++)
        {
            double temp;
            // Compare 2 values - increment a counter here
            counter++;

            if (Numbers[j]>Numbers[j+1])
            {
                temp = Numbers[j];
                Numbers[j]= Numbers[j+1];
                Numbers[j+1]= temp;
                cout << "Array: " << endl;
                change[j] = true;
                change[j + 1] = true;

                for (int i = 0; i < 10; i++)
                {
                    cout << Numbers[i] << ", ";
                }
            }
        }
    }

    // display the sorted array:
    cout << endl;
    cout<<"ARRAY CONTENTS SORTED, IMPLEMENTATION 1 "<<endl;
    for (int i=0; i<NMAX; i++)
    {
        cout<<Numbers[i]<<endl;
    }
    //Display the values of the counter after the whole sort
    return 0;
}
intmain()
{
双数[NMAX]={31.2,29.7,53.5,69.0,23.7,71.8,49.3,52.9,51.3,57.1};
布尔变化[NMAX]={0,0,0,0,0,0,0,0,0,0};
//注意这个顶部计数器,i,倒计时
int计数器=0;
对于(int i=NMAX-1;i>0;i--)
{
//这个计数器,j,只会达到当前的i值
//这意味着它不会遍历已经“冒泡”到数组末尾的元素
对于(int j=0;jNumbers[j+1])
{
温度=数字[j];
数字[j]=数字[j+1];
数字[j+1]=温度;

不能我不明白为什么需要额外的
bool
s数组,如果 您还记得当您输出
数字时,交换了
j
j+1
。我只想简单地写下:

for (int n = 0; n < NMAX; ++n)
{
    if (n == j + 1 || n == j) 
        cout << '*' << Numbers[n] << "*, ";
    else
        cout << Numbers[n] << ", ";
}
for(int n=0;n欢迎来到SO社区!可以在中找到描述什么是一个好问题的文章。对于这个问题,您做得很好,但更具体地说明什么不起作用会有所帮助-更好的诊断会带来更好的答案。for(int i=0;i<10;i++){cout在该循环中,数字
i
用于显示
number[i]
的值。既然在已更改位置的值的索引处设置了值
true
,您可以用
change[i]
做什么呢?提示:考虑“if语句”。对于(int i=0;i<10;i++){if(change[i]=正确){不需要使用
=
操作符而不是
=
,但差不多就这样了!至于重置更改数组,只需在完成任何打印后将所有内容都设置为false即可-无需过于优雅。我也不确定为什么。这只是任务的一个要求。我很难将其重置为false对于(int i=0;i<10;i+++){if(change [i]=true){cout @ Dprog,C++中,我们比较相等与==不=,后者是赋值甚至在IF内。也更常见的是用if(change [i])来检验布尔数组元素(如果不是[i]=真)但那只是品味的问题,也许我是个白痴。非常感谢。因为我是新来的,所以不会让我给你投票。除非有人给出更好的答案,否则你可能会接受答案。