Yang ingin saya lakukan adalah ketika saya mengambil input dari pengguna, memasukkan input itu ke dalam array dalam urutan yang diurutkan, mis. masukan pengguna 22,3,9,10,33
outputnya adalah: 3,9,10,22,33.

Kode yang saya miliki di bawah ini berfungsi kecuali fakta bahwa untuk elemen terakhir yang ditambahkan berada pada indeks yang salah. Ini adalah tes untuk sekolah (itulah sebabnya array adalah 50 elemen besar dan ada seluruh kelas dengan getter dan setter & kurangnya pengecekan kesalahan) dan saya mencoba untuk melihat di mana saya salah, saya sudah mencoba keduanya penyisipan dan seleksi yang keduanya menghasilkan hasil ini. Dari pemahaman saya, seharusnya empat puluh lima nol berturut-turut dan kemudian elemen saya dalam urutan menaik.

Misalnya) Ini adalah output yang saya dapatkan (apakah saya menggunakan seleksi atau penyisipan setelah memanggil metode cetak saya

Larik Terurut: 0 0 0 0 33 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 9 10 22

 public class test
{
    private int [] arr;
    private int maxSize;
    private int numItems;
    public test(int maxSize)
    {
        this.maxSize = maxSize;
        numItems = 0;
        arr = new int[maxSize];
    }

    public bool addItem(int key)
    {
        if (numItems < maxSize)
        {
            selectionSort(key);
            arr[numItems] = key;
            numItems++;
            return true;
        }
        return false;
    }

    public bool insertionSort(int key)
    {
        int n = arr.Length - 1;
        for (int i = 1; i < n; i++)
        {
            key = arr[i];
            int j = i - 1;
            while(j>=0 && arr[j] > key)
            {
                arr[j+1] = arr[j];
                j --;
            }
            arr[j + 1] = key;
        }
        return true;
    }

    public bool selectionSort(int key)
    {
        int  n = arr.Length - 1;
        for (int i = 0; i < n; i++)
        {
            key = i;
            for(int j = i + 1; j < n; j++)
            {
                if (arr[j] < arr[key])
                {
                    key = j;
                }
            }
            int temp = arr[key];
            arr[key] = arr[i];
            arr[i] = temp;

        }
        return true;
    }    

         static void Main(string[] args)
    {

        test x = new test(50);

        int count = 0;
        int element;
        while (count < 5)
        {
            Console.WriteLine("Enter an element to add into the array");
            element = Convert.ToInt32(Console.ReadLine());
            x.addItem(element);
            count++;
        }}
1
hazey 28 Januari 2020, 09:08

2 jawaban

Jawaban Terbaik

Saya menemukan dua masalah dengan kode Anda dan ini kecil.

  1. Perbarui fungsi addItem untuk memindahkan selectionSort di bawah operasi penetapan.
    public bool addItem(int key)
    {
        if (numItems < maxSize)
        {
            arr[numItems] = key;
            selectionSort(key);  // below the arr[numItems] assignment.
            numItems++;
            return true;
        }
        return false;
    }
  1. dan dalam metode selectionSort, ubah dua hal.

    Sebuah. for loop untuk j harus sampai ke n dan

    B. istirahat ketika k=j;

        public bool selectionSort(int key)
    {
        int n = arr.Length - 1;
        for (int i = 0; i < n; i++)
        {
            key = i;
            for (int j = i + 1; j <= n; j++) // <= n instead of < n
            {
                if (arr[j] < arr[key])
                {
                    key = j;
                    break;             // break here once you have k = j.
                }
            }
            int temp = arr[key];
            arr[key] = arr[i];
            arr[i] = temp;

        }
        return true;
    }

Ini harus mengurus masalah Anda.

0
Jawad 28 Januari 2020, 06:29

Saya pikir Anda mencari jenis penyisipan di sini adalah contohnya.

   static void Main(string[] args)
    {
        int[] numbers = new int[10] {22,1,34,20,12,10,5,33,11,5};
        Console.WriteLine("\nOriginal Array Elements :");
        Show(numbers);
        Console.WriteLine("\nSorted Array Elements :");
        Show(InsertionSort(numbers));
        Console.ReadKey();
        }

    static int[] InsertionSort(int[] inputArray)
    {
        for (int i = 0; i < inputArray.Length - 1; i++)
        {
            for (int j = i + 1; j > 0; j--)
            {
                if (inputArray[j - 1] > inputArray[j])
                {
                    int temp = inputArray[j - 1];
                    inputArray[j - 1] = inputArray[j];
                    inputArray[j] = temp;
                }
              }
        }
        return inputArray;         
    }
    public static void Show(int[] array)
    {
        foreach (int i in array)
        {
            Console.Write(i.ToString() + "  ");
        }
     }
0
Negi Rox 28 Januari 2020, 06:24