2016-12-15 6 views
0

配列に値を挿入しながら同時に挿入したいとしましょう。これは私の解決策だった :私は例外を処理しませんでした知っているソート中に数値を配列に挿入する方法

int[] arr = new int[5]; 
int k; 
arr[0] = int.Parse(Console.ReadLine()); 

for (int i = 1; i < arr.Length; i++) 
{ 
    int num = int.Parse(Console.ReadLine()); 

    for (k = i; k > 0 && num < arr[k - 1];--k) arr[k] = arr[k - 1]; 

    arr[k] = num; 
} 

、私はコード自体について話しています。

これを行うには良い方法がありますか?

+0

あなたの意見はどのようなもので、どのように並べ替えたいのですか?あなたが希望する出力を提供するかどうかは、私たちが答えるのに役立ちます。 – RandomStranger

+0

もっと良いことはどういう意味ですか?パフォーマンスが賢明であるか、または可読性の観点からですか? – CSharpie

+0

リストオブジェクトは配列よりも優れています。リストにはもっと多くのメソッドがあります。また、配列に2つのアイテムしかない場合、5つのアイテムの配列をどのようにソートしますか? 3つの空の項目は配列の先頭または最後にソートされますか? – jdweng

答えて

0

それはあなたがこれを行うことができ、配列である必要はありません場合は、次の

static void Main(string[] args) 
{ 
List<int> list = new List<int> 
    { 
    1, 
    2, 
    7, 
    10 
    }; 

    int k = int.Parse(Console.ReadLine()); 
    list.Add(k); 
    list.Sort(); 
} 

編集:あなたが挿入するときに、あなたがこれを行うことができますソートする場合:

int k = int.Parse(Console.ReadLine()); 
    int i = list.Where(x => x > k).Min(); 
    int index = list.IndexOf(i); 
    list.Insert(index, k); 
+0

まあ、私はそれが挿入されていない間に並べ替えたい – SuperMinefudge

3

あなたが使用することができますSortedSet<>は、アイテムを追加すると自動的にソートされます。

var numbers = new SortedSet<int>() 
{ 
    4, 
    9, 
    6, 
    3 
}; 

foreach (var number in numbers) 
{ 
    Console.WriteLine(number); 
} 
0

Listを使用して配列に変換できます。あなたはすべての時間で注文あなたのリストを維持するときは、インサート・インデックスを取得するには、リストのBinarySearchメソッドを使用することができます。

const int length = 5; 

List<int> result = new List<int>(length); 

for (int i = 0; i < length; i++) { 
    int num = int.Parse(Console.ReadLine()); 
    int insertIndex = result.BinarySearch(num); 
    if (insertIndex < 0) { 
     insertIndex = ~insertIndex; 
    } 
    result.Insert(insertIndex, num); 
} 
int[] arr = result.ToArray(); 

バイナリ検索を使用すると、現在実行している線形検索よりはるかに高速です。あなたは現在の5つの値でそれを見ることはできません。あなたは大規模なリスト(hundretsまたは何千もの値)でそれを断固として見ます。

関連する問題