C++数组排序我

Ryu*_*Ryu 2 c++ arrays sorting

困在阵列分拣机上.必须从最大到最小的数字排序.我正在尝试两个循环(一个嵌套在另一个循环中).这是代码:

int counter=0; // inner counter
int counter2=0; // outer counter
int sparky[14]; //array set to 14 just to simplify things
int holder; // holds the highest value
int high; //stores the position where it found the value holder

while (counter2 < howmany)
 {
  holder= sparky[counter];
  while (counter <= howmany)
   {
    counter++;
    if (sparky[counter] > holder)
     {
      holder= sparky[counter];
      high= counter; 
     }
   }
   counter2++;
   counter=counter2;
   sparky[high]= sparky[counter-1];
   sparky[counter-1]=holder;
 }
Run Code Online (Sandbox Code Playgroud)

ARRAY UNSORTED:

data[ 0] = 9
data[ 1] = 8
data[ 2] = 7
data[ 3] = 15
data[ 4] = 14
data[ 5] = 3
data[ 6] = 2
data[ 7] = 1
data[ 8] = 10
data[ 9] = 6
data[10] = 5
data[11] = 4
data[12] = 13
data[13] = 12
data[14] = 11
Run Code Online (Sandbox Code Playgroud)

由代码分类的阵列:

data[ 0] = 15
data[ 1] = 14
data[ 2] = 13
data[ 3] = 12
data[ 4] = 11
data[ 5] = 11
data[ 6] = 10
data[ 7] = 9
data[ 8] = 8
data[ 9] = 7
data[10] = 6
data[11] = 5
data[12] = 4
data[13] = 3
data[14] = 2
Run Code Online (Sandbox Code Playgroud)

如您所见,11在"已排序"代码中出现两次.虽然我输入这个,但我想知道"高"的价值是否与它有关.

aJ.*_*aJ. 5

除非是家庭作业,你可以尝试:

std::sort(A, A + N, std::greater<int>());
Run Code Online (Sandbox Code Playgroud)


pax*_*blo 5

首先要做的事情:

int sparky[14];
Run Code Online (Sandbox Code Playgroud)

会给你一个14元素的数组sparky[0..13],而不是你想象中的15个元素.

其次,你的内循环不太正确.你从索引1开始并进入索引15,而因为C数组从零开始,你应该从0循环到14.

您可以通过将循环条件更改为while (counter < howmany)counter++在内循环结束之前移动到来解决此问题.

只是为了澄清这一点,你确实在0开始循环但是,因为你在循环中做的第一件事是counter++在使用之前sparky[counter],你正在处理从索引1开始的元素.并且,在循环的最后一次运行中,在这里counter == howmany(根据你的其他评论14),你将它增加到15并使用它,这超出了数组的末尾.

并且,为了澄清澄清:-),如果你将howmany设置为14(即,比数组元素的数量少一个),你的循环正确的,因为正如你在其他地方的注释中指出的那样,你加载了元素零在进入内循环之前.我认为你确实仍然需要high设置holder.如果没有这样做,我会在我的列表中得到两个6和两个2,而没有3或4.

作为howmany设置为14的注释的一个副问题,我建议变量名称应该回应它们的意图.你在数组中明显有15个元素(索引0到14包括在内).不要把它作为批评,我只是想帮忙.

第三,(最后,我认为),你没有在high 每次设置时设置holder- 这些应该保持同步,以使你的算法正常工作.

请告诉我们这是否是作业.如果没有,我会发布我的解决方案.如果是这样,你应该从这个和其他答案给出的指导原则中解决.你应该知道,如果它是家庭作业而你使用在互联网上的公共论坛上发布的解决方案(例如这个),你几乎肯定会因抄袭而失败.不要误以为你的教育工作者不会检查那种东西.

最重要的是,虽然我很乐意发布我的解决方案,但您可能不应该将其用作课堂作业.最重要的是,至少先给它一个镜头.大多数家庭作业的寻求者似乎来到这里只有规格:-)

更新:由于您发布了以下内容:

很抱歉提到,但这是课程额外学分项目的一部分.

我想这是课堂作业.所以,没有汤给你:-)不过,上面的三点应该足以让你解决它.如果您对此有特定问题,请随时在此答案的评论中提问.

祝好运.