今天中午有空,幫人寫了個關於合並排序的算法(递归C#版)
先看下合並排序的基本策略思想——平衡、简单二分分治:
•   将待排序元素叙列简单地分成大小大致相等的左
•   右两段,接着依次分别对这两段子叙列递归地进 
•   行合并排序,然后利用这两段子叙列已得到的有
•   序性,将它们有序地合并在一个工作区,最后用
•   工作区中排好序的全叙列更新原待排序的元素叙
•   列成为所要求的排好序的元素叙列。
調用形式如下:

;
C#算法---合並排序            this.MergeSoft(ref ar,0,ar.Length-1);
C#算法---合並排序            
for(int i=0;i<ar.Length;i++)
{
C#算法---合並排序             ar[i];
C#算法---合並排序            }

遞歸程式如下
C#算法---合並排序private void MergeSoft(ref int[] arrA,int left,int right)
{
C#算法---合並排序            
if(left<right)
{
C#算法---合並排序                
int mid = (left+right)/2;
C#算法---合並排序                MergeSoft(
ref arrA,left,mid);
C#算法---合並排序                MergeSoft(
ref arrA,mid+1,right);
C#算法---合並排序                
int[] arrC = Merge(arrA,left,mid,right);
C#算法---合並排序                CopyArray(
ref arrA,arrC,left,right);
C#算法---合並排序            }

C#算法---合並排序        }
對左右兩部份進行排序
C#算法---合並排序private int[] Merge(int[] arrA,int left,int mid,int right)
{
C#算法---合並排序            
int[] arrB = new int[right-left+1];
C#算法---合並排序            
int i= left, j=mid+1, k=0;
C#算法---合並排序            
while((i<=mid) && j<=right)
C#算法---合並排序                
if(arrA[i]<=arrA[j]) arrB[k++= arrA[i++];
C#算法---合並排序                
else arrB[k++= arrA[j++];
C#算法---合並排序            
if(i>mid && j<=right)
C#算法---合並排序                
for(int q=j; q<=right;q++)
C#算法---合並排序                    arrB[k
++= arrA[q];
C#算法---合並排序            
if(j>right && i<=mid)
C#算法---合並排序                
for(int q=i; q<=mid;q++)
C#算法---合並排序                    arrB[k
++= arrA[q];
C#算法---合並排序            
return arrB;
C#算法---合並排序        }
將排序後的數據合併到原數組
C#算法---合並排序private void CopyArray(ref int[] arrA,int[] arrC,int left,int right)
{
C#算法---合並排序            
for(int i=left,j=0;i<=right && j<arrC.Length;i++,j++)
C#算法---合並排序                arrA[i] 
= arrC[j];
C#算法---合並排序        }

相关文章:

  • 2021-11-04
  • 2021-08-19
  • 2021-08-15
  • 2021-10-18
  • 2022-02-19
  • 2021-05-17
猜你喜欢
  • 2022-12-23
  • 2021-05-26
  • 2022-02-25
  • 2021-12-01
  • 2021-12-24
  • 2021-12-24
  • 2021-12-24
相关资源
相似解决方案