不多说,上代码,代码写得很丑,编码习惯不好。。
package Sort;
import java.util.Arrays;
public class MergeSort {
public static void main(String args[])
{
int array[]={8,7,6,5,4,3,2,1};
MergeSort sort= new MergeSort();
sort.Merge_Sort(array, 0, array.length-1);
System.out.println(Arrays.toString(array));
}
/*
* 递归进行合并
*
*程序写完后检查初始化(第一次进入循环)是否满足条件,然后检查继续迭代是否满足条件,递归出口
*/
public void Merge_Sort(int array[],int left,int right)
{
if(left<right)
{
int middle=(left+right)/2;
Merge_Sort(array, left,middle);
Merge_Sort(array,middle+1,right);
Merge(array, left, middle, right);
}
}
/*合并以排序好的两个子序列
*假设array[p]~array[q]已经完成排序 ,array[q+1]~array[r]也完成排序,现在将两个序列合并
*为一个有序序列,即 让array[p]~array[r]有序
*1 将数组array[p]~array[q]复制到数组left中
*2 将数组array[q+1]~array[r]复制到数组right中
*把数组left、right的最后一个元素复制成0x7fffffff,即最大的int值,作为哨兵,优化代码。
*3、比较数组left,right的元素的值,写入到数组array中。
*
*/
public void Merge(int [] array,int p,int q,int r)
{
int left[]=new int[q-p+2];
int right[]=new int[r-q+1];
for(int i=0,j=p;i<left.length-1;i++,j++)
{
left[i]=array[j];
}
left[left.length-1]=0x7fffffff;
for(int i=0,j=q+1;i<right.length-1;i++,j++)
{
right[i]=array[j];
}
right[right.length-1]=0x7fffffff;
for(int k=p,i=0,j=0;k<=r;k++)
{
System.out.println("k:"+k);
if(left[i]<=right[j])
{
array[k]=left[i++];
}
else
{
array[k]=right[j++];
}
}
}
}
分享到:
相关推荐
一个Java小程序,利用递归思想实现的归并排序算法。其中有两个类,排序数据是写死在main方法中的。
编写选择排序,插入排序,自顶向上合并排序,合并排序,快速排序,理解各排序算法的实现原理,加深对排序算法的理解。
归并排序,消除递归归并排序,快排,Java实现
NULL 博文链接:https://128kj.iteye.com/blog/1663631
在Java实现中,归并排序通过递归调用mergeSortHelper方法将数组划分为更小的子数组,并在最后使用merge方法将有序子数组合并成一个完整的数组。归并排序虽然需要额外的空间来存储临时数组,但其稳定的性能和可并行化...
自然合并的核心主要是一个Pass函数,这个函数中设置了一个array数组,来存放每一组有序元素的起始元素的下标,最后再将最后一个元素的下标+1存放为array数组的最后一个元素,这样,在后面的合并实现中会显现出这样记录的...
归并排序是一种高效的排序算法,通过将数组逐步分割和合并来实现排序。本教程将深入介绍归并排序的原理,并提供Java示例代码,帮助您理解如何实现这一算法。无论您的编程水平如何,本教程都将为您提供归并排序的全面...
mergeSort 方法实现了归并排序算法。它使用递归的方式将数组不断划分为更小的子数组,直到每个子数组只有一个元素,然后再依次将这些子数组进行合并,从而实现排序。 merge 方法用于合并两个有序子数组。它借助两个...
一年前做的排序动画,归并排序动画一直未完成,今天完成了,与大家共享
分治法的基本思想 将一个规模为n的问题分解为k个规模较小的子问题,这些子问题相互独立且与原问题相同。
非递归归并排序详细分析,Java实现. 非常详细,基本上可以看明白
归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体...一般情况下,很少利用二路归并排序法进行内部排序。
一个算法设计与分析的实验报告,比较归并排序与快速排序的时间差异,这里采用在一个java程序中对随机生成的任意个数分别进行两种方法的排序并记录各自的时间,最后得出结论。 本实验报告附代码以及详细解释
Java数组排序:冒泡排序、选择排序 、插入排序 、快速排序、希尔排序、堆排序和归并排序 三种Java数组复制方法 Java数组最大最小值 四种合并Java数组方法 Java数组升降序排序 Java数组查找:二分查找、顺序查找、...
归并排序:它有一定数量的数据移动,所以我们可能过与插入排序组合,先获得一定长度的序列,然后再合并,在效率上将有所提高。 2) 当n较大,内存空间允许,且要求稳定性 =》归并排序 3)当n较小,可采用直接插入...
Scau 归并排序和普通的归并排序基本一致,只是在实现过程中使用了一些小技巧来提高排序效率。 归并排序是一种经典的分治思想的排序算法,它基于“分而治之”的策略,将待排序序列不断地二分,并对两个子序列分别...
主要介绍了java 中归并排序算法详解的相关资料,归并排序算法又称为合并排序算法,是一种时间复杂度为O(N logN)的排序算法,因而其在平常生活工作中应用非常广泛,需要的朋友可以参考下
java归并排序,带简单思路,合并排序中多种情况处理。随便写着玩的
Java中常见的排序算法有以下几种: 冒泡排序(Bubble Sort):通过比较相邻元素的大小,将较大的元素...归并排序(Merge Sort):将数组分成两半,分别对这两部分进行排序,然后将排序后的两部分合并成一个有序序列。
归并排序执行三路归并排序