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(); }