public void mergeSort(int[] array){
int temp = array.length/2;
if(temp == 0){
return;
}
int[] a = new int[temp];
int[] b = new int[array.length - temp];
for(int i=0;i<temp;i++){
a[i] = array[i];
}
for(int i=0;i<array.length - temp;i++){
b[i] = array[temp + i];
}
if(a.length != 1){
this.mergeSort(a);
}
if(b.length != 1){
this.mergeSort(b);
}
int aIndex = 0;
int bIndex = 0;
int arrayIndex = 0;
while(aIndex != a.length && bIndex != b.length){
if(a[aIndex] > b[bIndex]){
array[arrayIndex++] = b[bIndex++];
continue;
}else if(a[aIndex] < b[bIndex]){
array[arrayIndex++] = a[aIndex++];
continue;
}else{
array[arrayIndex++] = a[aIndex++];
array[arrayIndex++] = b[bIndex++];
}
}
while(bIndex < b.length){
array[arrayIndex++] = b[bIndex++];
}
while(aIndex < a.length){
array[arrayIndex++] = a[aIndex++];
}
}
效率:
由于需要一个被排序数组等大小的数组来辅助排序,空间复杂度比较高,时间复杂度为:O(N*logN)
分享到:
相关推荐
C语言所有排序大全,解决了您日常上课考试学习的需要,在这里每一个程序都没有错误,其中压缩包包括了归并排序;基数排序;快速排序;冒泡排序;选择排序;折半排序;希尔排序这些日常排序,因为是全集所以大家踊跃...
以下是关于"插入排序、选择排序、希尔排序、堆排序、冒泡、双向冒泡、快速排序、归并排序、递归的归并排序、基数排序"这十大经典排序算法的详细解释: 1. 插入排序:插入排序是一种简单的排序算法,它通过构建有序...
本资源提供了七大经典排序算法的实现程序,包括快速排序、冒泡排序、选择排序、归并排序、插入排序、希尔排序和堆排序。下面将逐一详细介绍这些排序算法及其原理。 1. 快速排序:由C.A.R. Hoare提出,是一种采用...
归并排序:如何使用Java实现归并排序算法,程序详细解读; 归并排序:如何使用Java实现归并排序算法,程序详细解读; 归并排序:如何使用Java实现归并排序算法,程序详细解读; 归并排序:如何使用Java实现归并排序...
以下是关于"冒泡排序,选择排序,插入排序,希尔排序,堆排序,归并排序,快速排序"这七种常见排序算法的源码实现及相关知识点的详细解释: 1. **冒泡排序**:冒泡排序是一种简单的排序算法,它重复地遍历待排序的...
帮助大家更好的了解到常用的三大排序,冒泡排序、归并排序及快速排序。冒泡排序:冒泡排序是一种简单的排序算法,它重复地遍历要排序的列表,比较每对相邻的项,并在必要时交换它们的位置,直到没有任何一对数字需要...
选择排序、插入排序、冒泡排序以及快速排序和归并排序的C语言实现,绝对可用
本文将深入探讨Java编程语言中实现的七种主要排序算法:直接插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序以及归并排序。每种算法都有其独特性,适用于不同的场景和数据特性。 1. **直接插入排序**:...
在本资源中,我们主要关注的是使用MATLAB编程语言实现三种经典的排序算法:插入排序、二分归并排序以及归并排序。这些算法是计算机科学基础中的重要组成部分,特别是在算法设计与分析领域。MATLAB是一种强大的数值...
这里我们主要探讨五种排序算法:直接插入排序、堆排序、归并排序和快速排序,它们都是针对字符串元素进行排序的。这四种算法在C语言中都有实现,并且适用于随机生成的长度在1到16之间的字符串。 1. 直接插入排序: ...
11-5 JavaScript 实现:归并排序.mp4
排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序.mht
**归并排序是一种高效、稳定的排序算法,基于“分治”策略。它的基本思想是将大问题分解成小问题来解决。在归并排序中,我们首先将原始数组分割成两个或更多的子数组,对每个子数组进行排序,然后将排好序的子数组合...
归并排序(Merge Sort)是一种基于分治策略的高效排序算法,它的主要思想是将大问题分解成小问题,然后逐个解决小问题,最后再将解决好的小问题合并成解决大问题的答案。这种算法在计算机科学中有着广泛的应用,尤其...
本项目涵盖了五种经典的排序算法:快速排序、堆排序、归并排序、插入排序和选择排序。接下来,我们将深入探讨这些算法的原理、实现及性能特点。 1. **快速排序**: 快速排序由C.A.R. Hoare在1960年提出,是一种采用...
这里我们讨论六种经典的排序算法:直接插入排序、快速排序、归并排序、堆排序、基数排序和计数排序。这些排序算法在C语言中都有实现,并且在处理不同规模的数据时各有优势。 1. 直接插入排序: 直接插入排序是一种...
快速排序、归并排序、基数排序等排序算法比较,比较时间性能,采用C++语言实现。。。
归并排序是一种高效的排序算法,基于分治策略。在C语言中实现归并排序,我们需要理解以下几个关键知识点: 1. **分治法**:归并排序的核心思想是将大问题分解为小问题来解决。首先将数组分为两半,分别对两半进行...
归并排序是一种基于分治思想的排序算法,而插入排序则是一种简单直观的排序算法,适用于小规模或部分有序的数据。 **归并排序**: 1. **基本原理**:归并排序将待排序的序列分为两半,对每一半递归地进行归并排序,...
本文将详细介绍C++中实现的希尔排序、快速排序、堆排序和归并排序这四种经典排序算法。 希尔排序,由Donald Shell于1959年提出,是一种改进的插入排序。它的基本思想是通过设置一个增量序列,将待排序的元素按照...