wrongwrongな開発日記

しんまいさんの忘備録

【C#】簡単なQuickSortを書いてみた【.Net】

Xamarinで何か作りたいのでC#の練習で(また)簡単なQuickSort書きました。
github.com

ソース

最初から非同期でやるのと、多少は早くしたいなということでTaskの生成回数を減らすことを目標に書いてましたが、途中でグダってあんま意味無くなりました。
文法覚えたいので無視して今度は別の何かを書きます。

public static async Task<List<int>> CheckArray(List<int> arr)
{
    //長さ2以下が来る予定
    if (!(arr.Count < 2 || arr[0] < arr[1]))//長さが2未満かちゃんと並んでれば何もしない
    {
        int i = arr[0];
        arr[0] = arr[1];
        arr[1] = i;
    }

    return arr;
}
        
public static async Task<List<int>> QuickSort_Main(List<int> arr)
{
    //長さ3以上のarrが入ってくる予定
    var small = new List<int>();
    var big = new List<int>();
            
    for (var i = 1; i < arr.Count; i++)
    {
        if (arr[0] > arr[i]) small.Add(arr[i]);
        else big.Add(arr[i]);
    }

    var smalltask = (small.Count < 3) ? CheckArray(small) : QuickSort_Main(small);
    var bigtask = (big.Count < 3) ? CheckArray(big) : QuickSort_Main(big);

    await smalltask;
    await bigtask;
    small.AddRange(big);
    return small;
}
        
public static int[] QuickSort(int[] arr)
{
    var l = new List<int>(arr);
    return  ((arr.Length < 3) ? CheckArray(l) : QuickSort_Main(l)).Result.ToArray();
}

感想

VB経験有りでの個人的な感想ですが、C#よりVBのがTask書きやすいなと感じました。。。
後、最初はTask.Waitを使って書いていましたが、並列化前よか2倍以上実行時間が出て何だこれってなりました。TaskでWaitすんなってのは調べるとめっちゃ出てきましたが、性能的にも良くないみたいですね(とか言いつつ今回は並列化であまり性能が向上していない)。
11日以降春休み終了まで時間が無さすぎて辛い……。じっくりやりたい派なので時間が無いと全然やる気が出ませんが、せめて手だけは動かさないと……。