2017-10-26 22 views
1

これは比較的基本的ですが、C++で配列をソートする関数を記述しようとしています。通常の方法ではやりたくありません。ループで最大の配列を見つけ出し、 "max"として保存し、maxを別の配列の現在の値として保存してから、値をゼロに変更して、ループが次回実行されるまでに前回のmax数字はもう最高値にはならず、次の最高位を取ることができますが、なんらかの理由でこれは機能しません。どうしたんだ?C++の関数で配列をソート

#include <iostream> 
using namespace std; 

void mysort(int arr[10]){ 
    int max = 0; 
    int high[10]; 
    int count; 




    for (int j=0; j<10; ++j){ 

      for(int i=0; i<10; ++i){ 
      if (arr[i]> max){ 
      max= arr[i]; 

      count=i; 

     } 

     } 
    cout<<"the "<< count+1<<" largest is: "<< max<<"\n";  
    high[j]= max; 
    *arr[count]= 0; 

    } 
} 
main(){ 

    int pass[10] = {1,2,3,4,5,6,7,8,9,0}; 
    mysort(pass); 

} 
+1

あなたのC++学習リソースは非常に古くなっています。 'int main()'の 'int'はオプションではありません。 'void mysort'の' void'と同じように。 – StoryTeller

+0

"doesnt work"の意味は何ですか? 0をプレースホルダとして使用しているときは、入力に0を設定することはできません。そうでないと、プラクソルと0の入力を区別できません。また、<0は動作しません。なぜなら、0を最大値として見つけるからです。 – user463035818

+0

その行は、* arr [count] = 0; 'と書いてあります。 – informaticienzero

答えて

1

それが9に設定し、実行の残り

#include <iostream> 
using namespace std; 

void mysort(int arr[10]){ 
// int max = 0; **this was the problem** 
int high[10]; 
int count; 




for (int j=0; j<10; ++j){ 
    int max = 0; 
    for(int i=0; i<10; ++i) 
    { 
      if (arr[i]> max) 
      { 
        max= arr[i]; 
        count=i; 

      } 

    } 
    cout<<"the "<< count+1<<" largest is: "<< max<<"\n"; 
    high[j]= max; 
    arr[count]= 0; 

    } 
} 

int main(){**you should also add return type to int main** 

    int pass[10] = {1,2,3,4,5,6,7,8,9,0}; 
    mysort(pass); 

} 
0

のためにあなたの内側のループが常にその最終反復で9 MAXを設定することをとどまります最初の繰り返しになるあなたの最大は、リセットを取得することはありませんあなたの外側のループは内部ループが完了した後でmaxを読み取るだけなので、high [j]は常に9になります。

関連する問題