1

単純な挿入ソートを実行しようとしていますC#が、何が間違っているのかわかりません。プログラムを実行すると、次のようなウィンドウが出力されます。

before sorting
80 60 40 20 10 30 50 70

 during sorting
60 80 40 20 10 30 50 70
40 60 80 20 10 30 50 70
20 40 60 80 10 30 50 70
10 20 40 60 80 30 50 70
10 20 30 40 60 80 50 70
10 20 30 40 50 60 80 70
10 20 30 40 50 60 70 80

after sorting
10 20 30 40 50 60 70 80

ただし、並べ替え後の部分のみを表示しています。私は何を間違っているのでしょうか?

これはコードです:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        class CArray
        {
            private int[] arr;
            private int upper;
            private int numElements;
            public CArray(int size)
            {
                arr = new int[size];
                upper = size - 1;
                numElements = 0;

            }
            public void insert(int item)
            {
                arr[numElements] = item;
                numElements++;
            }
            public void displayElements()
            {
                for (int i = 0; i <= upper; i++)
                    Console.Write(arr[i] + " ");
                Console.ReadKey();

            }
            public void clear()
            {
                for (int i = 0; i <= upper; i++)
                    arr[i] = 0;
                numElements = 0;

            }

            public void insertionsort() {
            int inner, temp;
            for (int outer = 1; outer <= upper; outer++) { 
              temp = arr[outer];
              inner = outer;
              while (inner > 0 && arr[inner - 1] >= temp) { 
              arr[inner] = arr[inner-1];
              inner -= 1;
              }
                arr[inner] = temp;

            }

        }
        }
        static void Main(string[] args)
        {

            CArray nums = new CArray(10);
            Random rnd = new Random(100);
            for (int i = 0; i < 10; i++)

                nums.insert((int)(rnd.NextDouble() * 100));

            Console.WriteLine("before sorting: ");
            nums.displayElements();

            Console.WriteLine("during sorting: ");
            nums.insertionsort();

            Console.WriteLine("after sorting: ");
            nums.displayElements();

        }
    }
}
4

3 に答える 3

3

関数はディスプレイに何も出力しませinsertionSort()ん。

于 2012-09-11T21:02:18.923 に答える
2

挿入ソート()のどこかでdisplayElements()を呼び出すのはどうですか...?

于 2012-09-11T21:02:31.277 に答える
2

これは私のために働く...

public void insertionsort() { 
    int inner, temp; 

    for (int outer = 1; outer <= upper; outer++) {  
        displayElements();                          
        Console.WriteLine(); 

        temp = arr[outer]; 
        inner = outer; 
        while (inner > 0 && arr[inner - 1] >= temp) {  
            arr[inner] = arr[inner-1]; 
            inner -= 1;
        } 

        arr[inner] = temp; 
    } 

これは、insertsort() メソッドに 2 行を追加したときに得られる出力です...

ソート前:
96 15 66 90 35 94 71 61 34 14

ソート時:
96 15 66 90 35 94 71 61 34 14
15 96 66 90 35 94 71 61 34 14
15 66 96 90 35 94 71 61 34 14
15 66 90 96 35 94 710 61 34 9 7 14 6
15 61 34 14
15 35 66 90 94 96 71 61 34 14
15 35 66 71 90 94 96 61 34 14
15 35 61 66 71 90 94 96 34 14
15 34 35 61 66 71 90 15 35 96

ソート後:
14 15 34 35 61 66 71 90 94 96

于 2012-09-11T23:47:04.263 に答える