您的位置:首页 > 其它

归并排序

2013-12-20 17:32 239 查看
归并排序(Merge sort,台湾译作:合并排序)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。

[b]算法描述[/b]

申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列

设定两个指针,最初位置分别为两个已经排序序列的起始位置

比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置

重复步骤3直到某一指针达到序列尾

将另一序列剩下的所有元素直接复制到合并序列尾

[b]代码描述[/b]

List<int> Sort(List<int> lst)
{
int count = lst.Count;

if (count == 1) return lst;

int mid = count / 2;

List<int> left = new List<int>();
List<int> right = new List<int>();

for (int i = 0; i < mid; i++)
{
left.Add(lst[i]);
}

for (int i = mid; i < lst.Count; i++)
{
right.Add(lst[i]);
}

left = Sort(left);
right = Sort(right);

return Merge(left, right);
}

List<int> Merge(List<int> left, List<int> right)
{
List<int> lst = new List<int>();

while (left.Count > 0 && right.Count > 0)
{
if (left[0] < right[0])
{
lst.Add(left[0]);
left.RemoveAt(0);
}
else
{
lst.Add(right[0]);
right.RemoveAt(0);
}
}

if (left.Count > 0)
{
lst.AddRange(left);
}
else if (right.Count > 0)
{
lst.AddRange(right);
}

return lst;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: