C# - Sortieren von arrays in aufsteigender und absteigender Reihenfolge
Ich habe Probleme beim schreiben eine Methode, die true zurückgibt, wenn die Elemente eines Arrays (zahlen) werden in der Reihenfolge sortiert, aufsteigend oder absteigend, und false, wenn Sie sind nicht in irgendeiner Reihenfolge sortiert. Ich kann einen richtigen boolean-Wert, wenn das array aufsteigend aber ich weiß nicht, wie zu überprüfen absteigender Reihenfolge als auch in der gleichen Methode. Ich habe derzeit:
public static bool IsArraySorted(int[] numbers)
{
for (int i = 1; i < numbers.Length; i++)
{
if (numbers[i - 1] > numbers[i])
return false;
}
return true;
}
Jemand in der Lage, Hilfe zu bieten, wie Sie überprüfen, für eine absteigend sortierte array? Prost!
- Wenn es zwei continguus Werte mit der gleichen Zahl, die dem gewünschten Verhalten ?
- Mit return beendet die Funktion, während Sie vermutlich wollen, um eine Schleife auf die ganze Sammlung vor der Rückkehr nichts...
- Ich denke, das ist auch so gewollt - wenn Sie bereits herausgefunden haben, dass es nicht sortiert, es gibt keine Notwendigkeit zu prüfen, den rest des Arrays 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es sollte so etwas wie:
Beachten Sie die Verwendung der
ascending
variable zu speichern, die "Richtung" des Arrays. Es initialisiert das erste mal zwei Elemente, die anders sind, gefunden werden.Beachten Sie, dass wenn Sie möchten, können Sie sogar wieder die "Richtung" des Arrays:
innen die
if (ascending == null)
Dies ist eine generische version, basierend auf
IEnumerable<TSource>
:Beachten Sie die Verwendung von
bool first
/TSource previous
zu handhaben, diei - 1
(und die Tatsache, dass diefor
Zyklus war in der Lage, "skip", um das erste element)-5
wenn Sie nicht überprüfen Sie den letzten Wert?OutOfRangeException
wenn das array übergeben in einer Länge von 0 oder 1. Sie wollen einige argument, die Kontrollen an der Spitze der Methode.for ()
, und diefor()
wird block für arrays vonlength <= 1
,int i = 1; i < numbers.Length
NullReferenceException
wenn das array null ist.Mithilfe Von Linq -
Dieser verwendet eine Schleife, um zu testen beiden Fällen:
Verwendung:
Wenn Sie machen es zu einer Erweiterung Methode, die Sie verwenden können, es mit jeglicher Art:
IEnumerable<>
... (First
/Skip
)Skip(1)
ist die Aufzählung, lässt die erste. Was ist der Greuel?IQueryable<>
... Die Abfrage aufgelöst wurde zweimal (technisch zwei verschiedene Abfragen ausgeführt werden... eine, die hat einTOP 1
und eine andere, emuliert dieSkip(1)
)IList<T>
aber ich wollte nicht.IEnumerable<>
"? Warnung Aufkleber, die wichtig sind.int
und alle anderen collection-Typ als ein array in deiner Antwort? Wenn es einint[]
meine Antwort ist auch nicht merklich weniger effizient, so sehe ich nicht das problem.final
ist Java, nicht C#Wo ist meine Antwort? Ich schrieb es vor etwa einer Stunde:
Beispiel:
Sieht es eher wie eine wissenschaftliche Arbeit als eine praktische Frage. Ich denke, es tut nicht weh, zurück zu den Grundlagen einmal in eine Weile: