Saya harus memeriksa apakah array int diurutkan dalam urutan menaik jadi seperti 1,2,3,4 dll. Jadi percobaan saya ini yang ini dalam kode semu

int[] arrayName = {1,2,3,4,5}; //This one should be true
int[] arrayName2 = {5,4,3,6}; //This one should be false

for (int i = 0; i < arrayName.Length; i++) 
{
    if (arrayName[i] < arrayName[i] - 1)
    {
        Console.WriteLine("The array is sorted");
    }
    else Console.WriteLine("The array is not sorted");
}

Jadi pertanyaan saya adalah apakah cara mereka untuk memeriksa iterasi saat ini terhadap iterasi sebelumnya juga saya tidak dapat menggunakan perpustakaan atau ekstensi apa pun untuk latihan ini jadi pada dasarnya saya hanya dapat menggunakan "Sistem"

Sebagai contoh:

if (currentIteration > previousIteration) Console.WriteLine("The array is sorted");
else Console.WriteLine("The array is not sorted");
0
Maurice Filiatreault Hebert 16 September 2021, 20:16

3 jawaban

Jawaban Terbaik

Array diurutkan hanya jika x[i] <= x[i + 1] untuk semua kemungkinan nilai i

Jadi mari kita mulai dengan asumsi itu diurutkan. Jika kita menemukan sepasang nilai yang tidak memenuhi kondisi kita, array tidak akan diurutkan.

bool isSorted = true;
for (int i = 0; i < arrayName.Length - 1; i++) {
    if (arrayName[i] > arrayName[i + 1]) {
        isSorted = false; 
        break; // One pair isn't sorted, so we don't need to check anything else
    }
}

Sekarang setelah Anda memeriksa semuanya yang Anda butuhkan, Anda dapat menghasilkan.

if (isSorted)
    Console.WriteLine("Array is sorted");
else
    Console.WriteLine("Not sorted");
1
Pranav Hosangadi 16 September 2021, 17:33

Mulai iterasi pada indeks 1, lalu Anda dapat merujuk ke item sebelumnya dengan arrayName[i - 1]. Perhatikan bahwa -1 harus diterapkan ke indeks, bukan ke nilai larik arrayName[i] - 1.

Juga, Anda ingin mencetak hasilnya setelah Anda menguji array, bukan pada setiap iterasi. Yang terbaik adalah membuat fungsi, sehingga Anda dapat menerapkannya ke beberapa array dengan mudah.

static bool IsArraySorted(int[] a)
{
    for (int i = 1; i < a.Length; i++) {
        if (a[i] < a[i - 1]) {
            return false; // We don't need to test the rest of the array.
        }
    }
    return true;
}

Sekarang, Anda dapat menggunakannya seperti ini

if (IsArraySorted(arrayName)) {
    Console.WriteLine("The array is sorted");
} else {
    Console.WriteLine("The array is not sorted");
}
1
Olivier Jacot-Descombes 16 September 2021, 17:34

Ooh pertanyaan pekerjaan rumah. Mungkin juga bersenang-senang. Ini dapat dilakukan dengan Enumerable secara umum

bool isSorted<T>(IEnumerable<T> a) where T : IComparable => Enumerable.Range(1, a.Count() - 1).All(i => a.ElementAt(i).CompareTo(a.ElementAt(i - 1)) >= 0);

Sebut saja

int[] arrayName = { 1, 2, 3, 4, 5 }; //This one should be true
int[] arrayName2 = { 5, 4, 3, 6 }; //This one should be false
double[] arrayName3 = { 4, 4, 8, 11.5 }; //This one should be true
var arrayName4 = new Single[] { 3F, 4.5F, 6F, 1.0F }.ToList(); //This one should be false
var arrayName5 = new string[] { "a", "abb", "b", "c" }; //True
var arrayName6 = new string[] { "a", "a", "b", "a" }; //False

Console.WriteLine(isSorted(arrayName));
Console.WriteLine(isSorted(arrayName2));
Console.WriteLine(isSorted(arrayName3));
Console.WriteLine(isSorted(arrayName4));
Console.WriteLine(isSorted(arrayName5));
Console.WriteLine(isSorted(arrayName6));

benar
Salah
Benar
Salah
Benar
Salah

Umum dan dapat digunakan kembali.

Juga

bool isSorted2<T>(IEnumerable<T> a) where T : IComparable => a.SequenceEqual(a.OrderBy(b => b));

Yang melibatkan pengurutan array dalam memori tetapi terlihat lebih rapi.

1
djv 16 September 2021, 18:05