归并排序(递归)- 数据结构与算法
算法思想
该算法使用递归法实现,思路为:每次递归将待排序数组在中间位置分成左右两组,分别对左右两个数组进行归并排序,递归的条件是数组长度必须大于等于3,所以当数组中只有两个数据的时候可以直接进行比较排序,若数组只有一个元素则无需操作。每次递归结束时,左右两个数组都是有序的,然后对这两个中的数据进行排序,使整个数组有序。直到算法结束。
public class Test8{
public static int a[]=new int[]{13,12,11,10,9,8,7,46,5,4,3,2,1,58,56,45,12};
public static void main(String args[]){
rec(0,a.length-1);
for(int i=0;i<a.length;i++){
System.out.print(a[i]+" ");
}
}
public static void rec(int left,int right){
if(left+1==right){
if(a[left]>a[right]){
int t=a[left];a[left]=a[right];a[right]=t;
}
}else if(left+1<right){
//递归条件
int p=left+((right-left)/2);
rec(left,p);
rec(p+1,right);
sort(left,p,right);
}
}
public static void sort(int left,int p,int right){
int[] t=new int[right-left+1];
int i=left,j=p+1,index=0;
while(i<=p&&j<=right){
if(a[i]>a[j]){
t[index++]=a[j++];
}else{
t[index++]=a[i++];
}
}
while(i<=p){
t[index++]=a[i++];
}
while(j<=right){
t[index++]=a[j++];
}
for(int d=0;d<t.length;d++){
a[left+d]=t[d];
}
}
}
时间空间复杂度
时间复杂度:O( nlogn )
空间复杂度:由于是递归实现,所以空间复杂度为:O(n)
猜你喜欢
数据结构与算法
3783
递归实现合并两递增链表-合并后保持递增序列java描述数据结构:单链表算法:递归链表节点packageclub.test;/****链表节点*@authorjiajia
blog
快速排序 - 数据结构与算法
数据结构与算法
706
算法思想将待排序集合以该集合中随机的一个数为分界点分成左右两个集合,一次排序使其右边的集合的数据全部大于左边的集合,然后再分别递归式的对左右两个集合执行上述排序操作,直到递归集合没有数据,递归结束完
blog
数据结构与算法-反转链表-递归法
数据结构与算法
7137
反转链表有一个单向链表t如下:t=1-2-3-4-5-6-7-8-9写一个方法反转链表t如下:1-2-3-4-5-6-7-8-9=tjava代码:packagetest;/*** 节点类
blog
插入排序 - 数据结构与算法
数据结构与算法
596
算法思想:把所有需要排序的数据分成两个集合,一个是待排序集合,一个是已排序的集合,算法每次从未排序集合顺序或随机拿取一个数据,把它加入到已排序集合使其有序,直到未排序集合中的数据被取走完,算法结束
blog
数据结构+算法-堆排序
数据结构与算法
4131
堆排序(英语:Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。以最小堆为例下沉操
blog
递归实现全排列算法 c++描述
数据结构与算法
4173
递归实现全排列算法c++描述#includeiostreamusingnamespacestd;//交换voidexchange(int*a,inti,intj){if(i==j){return
blog
希尔排序 - 数据结构与算法
数据结构与算法
613
算法思想:希尔排序是插入排序的增强版,其主要的算法思想还是插入排序的思想。算法描述:在插入排序的基础上,对待排序数组进行间隔为inc的分组,然后对每个分组进行直接插入排序,一次排序完成后,减小inc
blog
冒泡排序 - 数据结构与算法
数据结构与算法
561
算法思想:每次从没有排序的集合a中拿取一个最大或最小的元素,放入有序的集合b中,直到a集合中的元素被取完算法描述:用变量i遍历整个数组,用变量j遍历i后面的数组,每次交换i比j大的元素,使得i遍历过
最近发表
归档
2018年11月
12
2018年12月
33
2019年01月
28
2019年02月
28
2019年03月
32
2019年04月
27
2019年05月
33
2019年06月
6
2019年07月
12
2019年08月
12
2019年09月
21
2019年10月
8
2019年11月
15
2019年12月
25
2020年01月
9
2020年02月
5
2020年03月
16
2020年04月
4
2020年06月
1
2020年07月
7
2020年08月
13
2020年09月
9
2020年10月
5
2020年12月
3
2021年01月
1
2021年02月
5
2021年03月
7
2021年04月
4
2021年05月
4
2021年06月
1
2021年07月
7
2021年08月
2
2021年09月
8
2021年10月
9
2021年11月
16
2021年12月
14
2022年01月
7
2022年05月
1
2022年08月
1
标签
算法基础
linux
前端
c++
数据结构
框架
数据库
计算机基础
储备知识
java基础
ASM
其他
深入理解java虚拟机
nginx
git
消息中间件
搜索
maven
redis
docker
dubbo
vue
导入导出
软件使用
idea插件
协议
无聊的知识
jenkins
springboot
mqtt协议
keepalived
minio
目录
祝愿神州十三飞行乘组平安归来