C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: リストのソート


(過去ログ 140 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■82314 / inTopicNo.1)  リストのソート
  
□投稿者/ まる (1回)-(2017/01/01(Sun) 17:23:11)

分類:[C#] 

はじめまして
宜しくお願いします

C#でリストを作成し、そのソートをしたいと思っています。
そのソートの方法ですが、リストの中にあるint型配列の要素0〜4を以下のような条件で
ソートしたいと思っていますが、効率の良いソート方法はありますでしょうか。

[開発環境]
VisualStudio 2015
C#
.Net4.5

[ソートの条件]
配列要素0〜4の順に降順ソートします。
その際に、要素0〜2の合計値、要素0〜2の値が全て0になった場合は、要素3〜4の合計値を
降順ソートの条件に含めます。

[構造体の型]
struct KOUZOU
{
string Name;
int[] Youso;
void reset(){ Youso = new int[5]; }
}

[リストの宣言]
List<KOUZOU> Sort_Data;


[ソートのイメージ]
<ソート前データの並び>
{ "name6", { 5, 2, 2, 4, 7}},
{ "name2", { 6, 1, 2, 3, 9}},
{ "name1", { 0, 4, 2, 1, 2}},
{ "name4", { 0, 3, 6, 9, 1}},
{ "name3", { 0, 0, 3, 2, 2}},
{ "name7", { 0, 0, 0, 5, 9}},
{ "name5", { 0, 0, 0, 6, 8}}

<ソート前データの並び>
{ "name2", {6, 1, 2, 3, 9}},  //name6と要素0〜2の合計値は一緒だが、要素0の値が大きい
{ "name6", {5, 2, 2, 4, 7}},
{ "name1", {0, 4, 2, 1, 2}},  //name4より要素0〜2の合計が少ないが、要素1の値が大きい
{ "name4", {0, 3, 6, 9, 1}},  
{ "name3", {0, 0, 3, 2, 2}},  //name5の要素3〜4の合計が多いが、要素2の値が大きい
{ "name5", {0, 0, 0, 6, 8}},
{ "name7", {0, 0, 0, 5, 9}}


引用返信 編集キー/
■82320 / inTopicNo.2)  Re[1]: リストのソート
□投稿者/ もりお (27回)-(2017/01/02(Mon) 01:06:07)
No82314 (まる さん) に返信
要素の比較が等しいとき合計も等しくなりますので
要素の比較が合計の比較よりも優先されるなら
合計の比較は必要ありませんよね

要素数が16以下なら挿入ソートが速いと思いますが
回数をよほど大量にこなさないと恩恵を得られないと思います

List.Sortで素朴に実装するのがいんじゃないでしょうか
Reference Sourceをざざっと見た限りですと.NET 4.5のList.Sortではイントロソートが使われてます
挿入ソート、クイックソート、ヒープソートのハイブリッドです
なのでList.Sortを使っておけば間違いないかと思います
引用返信 編集キー/
■82325 / inTopicNo.3)  Re[2]: リストのソート
□投稿者/ まる (3回)-(2017/01/02(Mon) 17:02:54)
もりおさん

ありがとうございます。
やってみます。

No82320 (もりお さん) に返信
> ■No82314 (まる さん) に返信
> 要素の比較が等しいとき合計も等しくなりますので
> 要素の比較が合計の比較よりも優先されるなら
> 合計の比較は必要ありませんよね
>
> 要素数が16以下なら挿入ソートが速いと思いますが
> 回数をよほど大量にこなさないと恩恵を得られないと思います
>
> List.Sortで素朴に実装するのがいんじゃないでしょうか
> Reference Sourceをざざっと見た限りですと.NET 4.5のList.Sortではイントロソートが使われてます
> 挿入ソート、クイックソート、ヒープソートのハイブリッドです
> なのでList.Sortを使っておけば間違いないかと思います
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -