Saya mencoba menggunakan algoritma merge-sort untuk mengurutkan Array angka, tetapi algoritma mengambil List<> bukan Array[]

Saya telah mencoba mengubah algoritme untuk menggunakan Array[] dengan mengganti '.Count' dengan '.Length', tetapi karena sifat ukuran tetap dari Array, saya mengalami masalah dengan baris yang menggunakan 'add' dan 'menghapus'

private static List<int> MergeSort(List<int> unsorted)
        {
            if (unsorted.Count <= 1)
                return unsorted;

            List<int> left = new List<int>();
            List<int> right = new List<int>();

            int middle = unsorted.Count / 2;
            for (int i = 0; i < middle; i++)  
            {
                left.Add(unsorted[i]);
            }
            for (int i = middle; i < unsorted.Count; i++)
            {
                right.Add(unsorted[i]);
            }

            left = MergeSort(left);
            right = MergeSort(right);
            return Merge(left, right);
        }

        private static List<int> Merge(List<int> left, List<int> right)
        {
            List<int> result = new List<int>();

            while (left.Count > 0 || right.Count > 0)
            {
                if (left.Count > 0 && right.Count > 0)
                {
                    if (left.First() <= right.First())  
                    {
                        result.Add(left.First());
                        left.Remove(left.First());      
                    }
                    else
                    {
                        result.Add(right.First());
                        right.Remove(right.First());
                    }
                }
                else if (left.Count > 0)
                {
                    result.Add(left.First());
                    left.Remove(left.First());
                }
                else if (right.Count > 0)
                {
                    result.Add(right.First());

                    right.Remove(right.First());
                }
            }
            return result;
        }

Saya ingin dapat meneruskan array yang tidak disortir ke dalam metode dan menghasilkan array yang diurutkan.

-1
MurplePunky 9 Agustus 2019, 02:13

1 menjawab

Jawaban Terbaik

Array berukuran tetap dan tidak berbagi metode yang sama dengan Lists, yang berukuran variabel. Jadi, Anda perlu mengonversi Array Anda ke Daftar lalu meneruskan Daftar sebagai param ke metode. Anda dapat gunakan:

List<object> list = myArray.Cast<Object>().ToList();

Atau jika Anda lebih suka linq:

List<object> list = myArray.ToList<object>();
1
Aiyuni 8 Agustus 2019, 23:23