Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public static DataArray MergeSort(DataArray items, int start, int sz)
- {
- int goL = sz / 2 + sz % 2, goR = sz / 2;
- opMcout += 2;
- DataArray res = new MyDataArray(sz, 0);
- if(sz <= 1)
- {
- res.Set(0, items[start]);
- opMcout+=3;
- return res;
- } else if(sz == 2)
- {
- opMcout += 5;
- res.Set(0, Math.Min(items[start], items[start + 1]));
- res.Set(1, Math.Max(items[start], items[start + 1]));
- return res;
- }
- opMcout += 2;
- DataArray l = MergeSort(items, start, goL), r = MergeSort(items, start+goL, goR);
- int pt1 = 0, pt2 = 0;
- for (int i = 0; i < sz; i++)
- if (pt1 >= goL)
- {
- res.Set(i, r[pt2++]);
- opMcout += 1;
- }
- else if (pt2 >= goR)
- {
- res.Set(i, l[pt1++]);
- opMcout += 2;
- }
- else if (l[pt1] < r[pt2])
- {
- res.Set(i, l[pt1++]);
- opMcout += 3;
- }
- else
- {
- res.Set(i, r[pt2++]);
- opMcout += 4;
- }
- opMcout += 1;
- return res;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement