递归排序法—-分治排序

原理:

利用二分法将一组数组分成n多段只有一个元素的数组,再将数组两两组合排序

前提:

设立两个函数,一个函数用于分化数组,一个函数用于合并数组的递归

import java.io.*;
 import java.util.Arrays;
 class test  
 {
     public static int[] paixu(int[] array){
         //用于递归的结束即分化为只有一个元素的数组
         if(array.length==1){
             return array;
         }
         int middle=array.length/2;
         //利用分化函数来完成数组的左右分化
         int[] le=paixu(sor(0,middle,array));
         int[] ri=paixu(sor(middle,array.length,array));
         int i=0,j=0;
         int index=0;//这里设立了坐标变量来整合数组
         while(i<le.length&&j<ri.length){
                 array[index]=ri[j];
                 j++;
             }else{
                 array[index]=le[i];
                 i++;
             }
             index++;
         }//此时循环结束,如果没用整合完成则代表左右两个数组有一个数组已经遍历到头(while判定里有一个已经不成立的),
        //在此基础下进行分类讨论分类讨论(ps:我感觉这里是易忽视点)
         if(i<le.length){
             for(int n=i;n<le.length;n++){
                 array[index]=le[n];
                 index++;
             }
         }
         if(j<ri.length){
             for(int m=j;m<ri.length;m++){
                 array[index]=ri[m];
                 index++;
             }
         }
         return array;
     }
     //用于分化数组的函数
     public static int[] sor(int left,int right,int[] array){
         int[] result=new int[right-left];
         for(int i=0;left<right;left++,i++){
             result[i]=array[left];
         }
         return result;
     }
     public static void main (String[] args) throws java.lang.Exception
     {
         int[] m={1,9,78,5,2,3,44,65,26,78,3,6,1,2};
         int[] p=paixu(m);
         System.out.println(Arrays.toString(p));
     }
 }