namespace MergeSort { class Program { static void Main(string[] args) { int[] array = { 3, 2, 1, 8, 9, 0 };
MergeSort(array, new int[array.Length], 0, array.Length - 1);
Console.WriteLine(string.Join(",", array)); }
///<summary> /// 数组的划分 ///</summary> ///<param>待排序数组</param> ///<param>临时存放数组</param> ///<param>序列段的开始位置,</param> ///<param>序列段的结束位置</param> static void MergeSort(int[] array, int[] temparray, int left, int right) { if (left < right) { //取分割位置 int middle = (left + right) / 2;
//递归划分数组左序列 MergeSort(array, temparray, left, middle);
//递归划分数组右序列 MergeSort(array, temparray, middle + 1, right);
//数组合并操作 Merge(array, temparray, left, middle + 1, right); } }
///<summary> /// 数组的两两合并操作 ///</summary> ///<param>待排序数组</param> ///<param>临时数组</param> ///<param>第一个区间段开始位置</param> ///<param>第二个区间的开始位置</param> ///<param>第二个区间段结束位置</param> static void Merge(int[] array, int[] temparray, int left, int middle, int right) { //左指针尾 int leftEnd = middle - 1;
//右指针头 int rightStart = middle;
//临时数组的下标 int tempIndex = left;
//数组合并后的length长度 int tempLength = right - left + 1;
//先循环两个区间段都没有结束的情况 while ((left <= leftEnd) && (rightStart <= right)) { //如果发现有序列大,则将此数放入临时数组 if (array[left] < array[rightStart]) temparray[tempIndex++] = array[left++]; else temparray[tempIndex++] = array[rightStart++]; }
(编辑:焦作站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|