コード内で問題に直面することができます。
ここに表示される「奇妙な」数字は、初期化されていないアレイsort_arr
に由来します。初期化されていないとはどういう意味ですか?よくsort_arr
はあなたの記憶の少しどこかでチャンクです。プログラムは通常そのメモリをクリアせず、むしろフリーで使用したメモリを要求するので、sort_arr
のチャンクは別のプログラムによって設定されたビットとバイトを含むことがあります。これらのバイトは整数値として解釈されるため、数値が発生します。最初に行うことは、配列を使用する前に初期化することです。
sort_arr[N] = { 0, 0, 0, 0, 0, 0, 0 };
なぜこれらの数値が発生したのですか?さて、おそらくあなたのアルゴリズムは、並べ替えられた配列になるsort_arr
のすべての値を設定することを期待しているでしょうか?しかし、あなたのアルゴリズムはそれほどうまくいきません。次の行を参照してください。
sort_arr[arr[j] - 1] = arr[j];
j
が1の場合はどうなりますか? arr[1]
は17と評価され、17-1は16と等しくなります。したがって、sort_arr[arr[1] - 1]
は配列の境界を超えるsort_arr[16]
と同じです。
自分でソートアルゴリズムをプログラミングしたい場合は、単純なbubble sortアルゴリズムで開始することをお勧めします。それ以外の場合は、配列をソートする必要がある場合はalgorithm
ヘッダを見てください。使用方法はかなり簡単です。
#include <iostream>
#include <algorithm>
#include <iterator> // << include this to use begin() and end()
using namespace std;
int main()
{
const int N = 7;
int arr[N] = { 3, 17, 2, 9, 1, 5, 7 };
int sort_arr[N] = { 0, 0, 0, 0, 0, 0, 0 };
copy(begin(arr), end(arr), begin(sort_arr));
sort(begin(sort_arr), end(sort_arr));
for (int i = 0; i < N; i++)
{
cout << sort_arr[i] << " ";
}
cout << endl;
}
ところで、あなたはあなたの配列の中で最大の価値を探していますよね?配列をソートした後、sort_arr[N - 1]
は配列に含まれる最大の値です。
この行で何をしようとしていますか? 'sort_arr [arr [j] - 1] = arr [j];'? – user2296177
'J 'が1であるとき、この式' arr [j] -1'は配列 'arr'の境界外にある' 17-1'と評価されます –
'sort_arr [arr [j] - 1]'が出ています配列の境界の(arr [j]は '17 '、' arr [j] -1は '16')...配列をどこでソートしたのですか? – songyuanyao