Okay, stellen Sie sich den Problemen in Ihrem Code.
Die "seltsamen" Zahlen, die Sie dort sehen, stammen aus dem nicht initialisierten Array sort_arr
. Was meine ich mit nicht initialisiert? Nun, sort_arr
ist ein kleines chunck irgendwo in deiner Erinnerung. Da ein Programm normalerweise seinen Speicher nicht löscht und stattdessen den Speicher beansprucht, den es als frei verwendet hat, kann der Teil von sort_arr
Bits und Bytes enthalten, die von einem anderen Programm gesetzt wurden. Die Zahlen treten auf, da diese Bytes als ganzzahliger Wert interpretiert werden. Das erste, was zu tun wäre, wäre das Array vor der Verwendung zu initialisieren.
sort_arr[N] = { 0, 0, 0, 0, 0, 0, 0 };
Nun, warum sind diese Zahlen aufgetreten? Nun, Sie erwarten wahrscheinlich, dass Ihr Algorithmus alle Werte in sort_arr
setzt, was zu einem sortierten Array führen würde, oder? Nun, aber Ihr Algorithmus funktioniert nicht so gut. Sehen Sie diese Zeile:
sort_arr[arr[j] - 1] = arr[j];
Was passiert, wenn j
1 ist? arr[1]
wird dann zu 17 und 17 bewertet - 1 ist gleich 16. Also ist sort_arr[arr[1] - 1]
dasselbe wie sort_arr[16]
, das die Grenzen Ihres Arrays überschreitet.
Wenn Sie einen Sortieralgorithmus selbst programmieren möchten, empfehle ich, mit einem einfachen bubble sort Algorithmus zu beginnen. Andernfalls, wenn Sie nur das Array sortieren müssen, schauen Sie sich den Header algorithm
an. Es ist ziemlich einfach zu bedienen:
#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;
}
Übrigens. Sie suchen nach dem größten Wert in Ihrem Array, oder? Nachdem Sie das Array sortiert haben, ist sort_arr[N - 1]
der größte Wert in Ihrem Array.
Was genau versuchen Sie mit dieser Zeile zu tun: 'sort_arr [arr [j] - 1] = arr [j];'? – user2296177
Wenn 'J' 1 ist, wird der Ausdruck' arr [j] - 1' zu '17-1' ausgewertet, was außerhalb des Bereichs für das Array' arr' ist. –
'sort_arr [arr [j] - 1]' geht aus der Grenze des Arrays. (wenn 'j'' 1' ist, dann 'arr [j]' ist '17' und' arr [j] - 1' ist '16' ... Und wo hast du das Array sortiert? – songyuanyao