递归排序法—-分治排序
2023-06-13 09:17:08 时间
递归排序法—-分治排序
原理:
利用二分法将一组数组分成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));
}
}
相关文章
- javascript对象数组内元素排序
- C++不知算法系列之排序从玩转冒泡算法开始
- 【蓝桥杯2022省赛】蓝桥杯题目笔记 Java版本数位排序、求阶乘基础与灵活分析
- php二维数组随机排序
- MySQL排序与分页技巧研究(mysql排序分页)
- C++快速排序(递归)算法详解
- 功能Oracle数据库之高级排序功能(oracle高级排序)
- Oracle数据库中的排序规则(oracle排序规则)
- MySQL中高低排序详解(mysql中从高到低排序)
- Oracle 数据库实现先排序后分页(oracle先排序再分页)
- Oracle先分组再排序的优越性(oracle先分组在排序)
- Oracle中实现分页排序的技巧(oracle中分页排序)
- 用于table内容排序
- JAVA简单选择排序算法原理及实现
- php使用递归与迭代实现快速排序示例
- JAVA算法起步之快速排序实例
- jquery表格排序、实时搜索表格内容(附图)