ソート5:集計ソート
12360 ワード
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Threading.Tasks;
6
7 namespace Sort
8 {
9 class Program
10 {
11 static void Main(string[] args)
12 {
13 List<int> list = new List<int>();
14 Random rd = new Random();
15 for (int i = 0; i < 10; i++)
16 {
17 list.Add(rd.Next(100));
18 }
19 List<int> successList = Sort(list);
20 foreach (int i in successList)
21 {
22 Console.WriteLine(i);
23 }
24 }
25
26 /// <summary>
27 ///
28 /// </summary>
29 static List<int> Sort(List<int> list)
30 {
31 //
32 if (list.Count <= 1)
33 {
34 return list;
35 }
36
37 int mid = list.Count / 2;
38 List<int> left = new List<int>();
39 List<int> right = new List<int>();
40 for (int i = 0; i < mid; i++)
41 {
42 left.Add(list[i]);
43 }
44 for (int i = mid; i < list.Count; i++)
45 {
46 right.Add(list[i]);
47 }
48 left = Sort(left);
49 right = Sort(right);
50 return Merge(left, right);
51 }
52
53 /// <summary>
54 /// List
55 /// </summary>
56 static List<int> Merge(List<int> left, List<int> right)
57 {
58 List<int> temp = new List<int>();
59 while (left.Count > 0 && right.Count > 0)
60 {
61 if (left[0] > right[0])
62 {
63 temp.Add(right[0]);
64 right.RemoveAt(0);
65 }
66 else
67 {
68 temp.Add(left[0]);
69 left.RemoveAt(0);
70 }
71 }
72 if (left.Count > 0)
73 {
74 foreach (int i in left)
75 {
76 temp.Add(i);
77 }
78 }
79 if (right.Count > 0)
80 {
81 foreach (int i in right)
82 {
83 temp.Add(i);
84 }
85 }
86 return temp;
87 }
88 }
89 }