自己写的,欢迎拍砖!
public class MergeSort {
/**
* 合并排序
* @param args
*/
public static void main(String[] args) {
int[] sourceArray = {22,428,23,76,24,4,52,45,6,56,13,75,76,9,6,342,5,67};
MergeSort is = new MergeSort();
int[] targetArray = is.sort(sourceArray);
for (int i = 0; i < targetArray.length; i++) {
int j = targetArray[i];
System.out.println(j);
}
}
private int[] sort(int [] sourceArray){
merge_sort(sourceArray, 0, sourceArray.length-1);
return sourceArray;
}
private void merge_sort(int[] source, int begin, int end){
if(begin < end){
int middle = (begin + end)/2;
merge_sort(source, begin, middle);
merge_sort(source, middle+1, end);
merge(source, begin, end, middle);
}
}
private void merge(int[] source, int begin, int end, int middle) {
/**
* 分成两个数组left,right之间的合并
* 并分别用i,j来记录比较的位置
*/
int m = middle - begin + 1;
int n = end - middle;
int[] left = new int[m];
int[] right = new int[n];
for (int i = 0; i < left.length; i++) {
left[i] = source[begin + i];
}
for (int i = 0; i < right.length; i++) {
right[i] = source[middle + i + 1];
}
int i,j,k=begin;
//开始逐位比较左右两个有序的数据大小
for(i=0,j=0; i<m && j<n; k++){
if(left[i] > right[j]){
source[k] = right[j];
j++;
}else{
source[k] = left[i];
i++;
}
}
//其中有一们已经比完了,剩下的直接添加到source中就可以了
while(i<m){
source[k] = left[i];
k++;
i++;
}
while(j<n){
source[k] = right[j];
k++;
j++;
}
}
}
分享到:
相关推荐
这里我们主要探讨两种经典的排序算法:快速排序和合并排序。 快速排序是一种分治算法,由英国计算机科学家C.A.R. Hoare在1960年提出。它的基本思想是选取一个基准元素,将数组分为两部分,一部分的所有元素都小于或...
归并排序算法是一种高效的排序算法,它的工作原理是通过将数组分为两个部分,然后将每个部分排序,最终合并两个部分以达到排序的目的。归并排序算法的时间复杂度为O(n log n),因此它适合大规模的数据排序。 6.堆...
本篇文章将详细讨论几种常见的排序算法:选择排序、冒泡排序、插入排序、合并排序以及快速排序,分析它们的算法原理、时间效率,并通过经验分析验证理论分析的准确性。 **1. 选择排序(Selection Sort)** 选择排序...
本篇文章将介绍一种经典的排序算法——**合并排序法**(Merge Sort),并通过C语言实现该算法。合并排序是一种非常有效的排序方法,其核心思想是分治法:将数据分为若干个子集,对这些子集分别进行排序,最后将排序...
**二、合并排序的步骤** 1. **分解**:将原始序列拆分为两个相等(或接近相等)的子序列。 2. **递归排序**:对每个子序列递归地应用合并排序。 3. **合并**:将两个已排序的子序列合并为一个完整的有序序列。 4...
Strassen矩阵乘法和棋盘覆盖和自然合并排序算法Strassen矩阵乘法和棋盘覆盖和自然合并排序算法Strassen矩阵乘法和棋盘覆盖和自然合并排序算法Strassen矩阵乘法和棋盘覆盖和自然合并排序算法Strassen矩阵乘法和棋盘...
自然合并排序算法,对合并排序算法进行进一步的优化
#### 二、合并排序的基本思想 1. **分解**:将数组分成两个部分。 2. **递归排序**:对每一部分进行递归地排序。 3. **合并**:将排序好的两部分合并成一个有序数组。 #### 三、关键步骤解析 ##### 3.1 `...
本文将详细探讨标题所提及的几种排序算法:合并排序、插入排序、希尔排序、快速排序、冒泡排序以及桶排序,并结合Java语言的实现进行解析。 1. **合并排序(Merge Sort)**: 合并排序是一种基于分治策略的排序算法...
合并排序是一种高效的、基于分治思想的排序算法。在C语言中实现合并排序,我们可以深入理解这个算法的原理,以及如何用C语言来编写代码。本文将详细探讨合并排序算法的理论基础,C语言实现的关键步骤,以及如何验证...
合并排序算法和二分搜索技术算法的实现实验报告.doc
排序算法是计算机科学中最基础和重要的算法之一,用于将一组数据按照特定的顺序进行排列。本文将对几种常见的内部排序算法和外部排序算法进行详细总结。 首先,排序的基本定义是:给定一个包含n个记录的序列,其...
本主题将深入探讨内部排序算法,并结合C语言代码进行解析。内部排序,顾名思义,是指数据在主存储器(内存)内完成的排序过程,与外部排序相对,后者通常用于处理超出内存容量的大数据集。 1. **基本排序算法**: ...
我们将比较不同的排序算法,包括合并排序和快速排序,并分析它们在链表中的性能。 首先,让我们讨论链表排序算法的挑战。链表的节点分布在内存中,可能会导致缓存未命中的情况,这会严重影响排序算法的性能。为了...
1. 熟练运用冒泡排序、选择排序、插入排序、希尔排序、快速排序、合并排序、堆排序等七种常见的内排序算法 2. 使用不同的数据结合计算各种算法的运行时间,验证算法的时间复杂性 3. 能够运用二路归并算法进行外排序 ...
本文将详细介绍五种常见的排序算法:快速排序、合并排序、堆排序以及基于整数和字符串的计数排序,并通过比较它们的特性来分析各自的优势与劣势。 **1. 快速排序** 快速排序是由C.A.R. Hoare提出的,它是一种分治...
/************合并排序算法的实现******************/ int main() { int p,q,r; printf("合并排序算法的实现:\n"); printf("请输入p、q、r的值(输入格式1,12,13):"); scanf("%d,%d,%d",&p,&q,&r); printf("p=%...
在Android开发中,将排序算法以图形化的方式展示出来,不仅可以帮助开发者更好地理解和记忆各种排序算法的工作原理,还可以为教学和学习提供直观的工具。"Android-Android图形化展示排序算法"项目,就是这样一个旨在...
以下将详细讲解标题和描述中提到的五种排序算法:选择排序、插入排序、自顶向上合并排序、合并排序以及快速排序。 1. **选择排序(Selection Sort)** 选择排序是一种简单直观的排序算法,它的工作原理是每一次从待...
合并排序(Merge Sort)是一种基于分治策略的高效排序算法,它的主要特点是稳定且具有较高的时间效率。在本文中,我们将深入探讨合并排序的工作原理、Java实现细节以及其优势和适用场景。 ### 合并排序的基本思想 ...