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]=真)但那只是品味的问题,也许我是个白痴。非常感谢。因为我是新来的,所以不会让我给你投票。除非有人给出更好的答案,否则你可能会接受答案。