JAVA 合并排序(递归算法)

JAVA 合并排序(递归算法)

                                 合并排序,递归算法,利用分治策略

+-------------------------------------------------code--------------------------------------------------------------+

 // 合并排序,递归算法,利用分治策略 //
import java.util.Scanner;
public class mergeSort {
        public static void MergeSort(int a[],int left,int right)
        { if(left<right)
         {  //至少需要两个元素
          int mid=(left+right)/2;  //对左侧排序
          MergeSort(a,left,mid);  //对右侧排序
          MergeSort(a,mid+1,right);
          //合并两段排序数组到数组b中,再拷贝回a中
          merge(a,left,mid,right);      
         }
        }   
        private static void merge(int c[],int left,int mid,int right)
        { //合并两段排序数组到数组d中
         int d[]=new int[right-left+1];
         int i,j,k=0; //k为d数组的下标
         i=left;
         j=mid+1;
         while(i<=mid && j<=right)
         { if(c[i]>c[j]) { d[k]=c[j]; k++; j++;}
           else          { d[k]=c[i];k++;i++;}
         }
         for(int q=j;q<=right;q++)
              {d[k]=c[q];k++; } 
         for(int q=i;q<=mid;q++)  
              {d[k]=c[q];k++; }
         //将d中数组再拷贝回c中
         int pos=left;
         for(k=0;k<=d.length-1;k++)
              { c[pos]=d[k]; pos++;}
        }
        public static void main(String[] args) {
             System.out.println(" +--- 合并排序,递归算法  ---+ \n 数组长度: ");
             Scanner reader= new Scanner(System.in);
       int len=reader.nextInt();
           int a[]=new int[len];//初始化a数组 
           System.out.println("随机生成的数组如下:");
           for(int i=0;i<a.length;i++)
               {a[i] = (int)(Math.random()*1000); //产生len个随机数 (<1000)
                System.out.println(a[i]); }
         MergeSort(a,0,a.length-1);
           System.out.println("排序后的数组如下:");
           for(int i=0;i<a.length;i++)
           { System.out.println(a[i]); }        
          }       }

 

+-------------------------------------------------code--------------------------------------------------------------+

JAVA 合并排序(递归算法) JAVA 合并排序(递归算法) - xiao - 那些年一起研究的那点儿事儿

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值