首页 > c#, 数据结构与算法 > 输入10个数字,应用归并排序算法用c#实现

输入10个数字,应用归并排序算法用c#实现

请用c#写出一个归并排序算法,要求输入10个整数,输出排序结果。
代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace MergeSorter
{
class Program
{
private static int[] myArray;
private static int arraySize;
public static void Sort(int[] a)
{
myArray = a;
arraySize = myArray.Length;
MergeSort();

}
//序列分割,序列归并,时间O(nlogn)
private static void MergeSort()
{
int[] temp = new int[arraySize];
MSort(temp, 0, arraySize - 1);
}
private static void MSort(int[] temp, int left, int right)
{
int mid;
if (right > left)
{
mid = (right + left) / 2;
MSort(temp, left, mid);//分割左边的序列
MSort(temp, mid + 1, right);//分割右边的序列
Merge(temp, left, mid + 1, right);//归并序列
}
}
private static void Merge(int[] temp, int left, int mid, int right)
{
int i, left_end, num_element, tmp_pos;
left_end = mid - 1;
tmp_pos = left;
num_element = right - left + 1;
while((left<=left_end)&&(mid<=right))
{
if(myArray[left]<=myArray[mid]) //将左端的序列归并到temp数组中
{
temp[tmp_pos]=myArray[left];
tmp_pos=tmp_pos+1;
left=left+1;
}
else //将右端序列归并到temp数组中
{
temp[tmp_pos]=myArray[mid];
tmp_pos=tmp_pos+1;
mid=mid+1;

}
}
while(left<=left_end) // 复制左边剩余的数据到temp数组中
{
temp[tmp_pos]=myArray[left];
left=left+1;
tmp_pos=tmp_pos+1;
}
while(mid<=right)//复制右边的剩余数据temp数组中
{
temp[tmp_pos]=myArray[mid];
mid=mid+1;
tmp_pos=tmp_pos+1;
}
for(i=0;i {
myArray[right]=temp[right];
right=right-1;
}

}

static void Main(string[] args)
{
int[] a=new int[]{4,2,1,6,3,6,0,-5,1,1};
Program.Sort(a);
for (int i = 0; i < a.Length; i++)
{
Console.WriteLine(a[i]);
}
}
}
}

原创文章转载请注明出处:云飞扬IT的blog

本文链接: http://www.ajaxcn.net/archives/285

分类: c#, 数据结构与算法 标签: ,
一键分享到:新浪微博分享  分享到网易微博    转贴到开心网  推荐到豆瓣  分享到QQ空间    RSS订阅
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.