public class MergeSort {
public static void main(String[] args) {
MergeSort ms = new MergeSort();
// int[] a = ms.merge(3, 2);
// a = ms.merge(2, 3);
int[] b = { 1, 2, 3, 4, 5, 6 };
int[] c = { 4, 5, 6, 7, 6, 354, 7542, 61, 34, 67, 8, 3, 4, 8, 1, 4, 6,
89, 2, 3, 4, 7, 234, 545, 2, 34, 8 };
long start = System.currentTimeMillis();
c = ms.sort(c);
long end = System.currentTimeMillis();
System.out.println("MergeSort a array with lenght of " + c.length
+ " in " + (end - start) + " second");
for (int i = 0; i < c.length; i++) {
System.out.println(c[i]);
}
}
private int[] sort(int[] number) {
int dividPoint = number.length / 2;// 4-2 5-2;
// int secondPart = firstPart+1;
int[] sortedArray = null;
int[] firstArray = getArray(number, 0, dividPoint);
int[] secondArray = getArray(number, dividPoint, number.length);
// secondArray = divid(secondArray);
if (firstArray.length > 2) {
firstArray = sort(firstArray);
} else if (firstArray.length <= 2) {
firstArray = merge(firstArray);
}
if (secondArray.length > 2) {
secondArray = sort(secondArray);
} else if (secondArray.length <= 2) {
secondArray = merge(secondArray);
}
sortedArray = merge(firstArray, secondArray);
return sortedArray;
}
private int[] getArray(int[] arr, int start, int end) {
int[] subArray = new int[end - start];
int subindex = 0;
for (int index = start; index < end; index++) {
subArray[subindex] = arr[index];
subindex++;
}
return subArray;
}
private int[] merge(int i, int j) {
int[] array = new int[2];
if (i > j) {
array[0] = j;
array[1] = i;
} else {
array[0] = i;
array[1] = j;
}
return array;
}
private int[] merge(int[] i) {
int[] returnArr = null;
if (i.length == 1) {
returnArr = merge(i[0]);
}
if (i.length == 2) {
returnArr = merge(i[0], i[1]);
}
return returnArr;
}
private int[] merge(int i) {
int[] array = new int[1];
array[0] = i;
return array;
}
private int[] merge(int[] i, int[] j) {
int[] array = new int[i.length + j.length];
int pointi = 0;
int pointj = 0;
for (int index = 0; index < array.length; index++) {
if (pointi < i.length && pointj < j.length) {
if (i[pointi] <= j[pointj]) {
array[index] = i[pointi];
pointi++;
} else {
array[index] = j[pointj];
pointj++;
}
} else {
if (pointi == i.length && pointj < j.length) {
int addedIndex = i.length + pointj - 1;
for (int newIndex = addedIndex + 1; newIndex < array.length; newIndex++) {
array[newIndex] = j[pointj];
pointj++;
}
break;
}
if (pointi < i.length && pointj == j.length) {
int addedIndex = j.length + pointi - 1;
for (int newIndex = addedIndex + 1; newIndex < array.length; newIndex++) {
array[newIndex] = i[pointi];
pointi++;
}
break;
}
}
}
return array;
}
}
分享到:
相关推荐
合并排序的Java实现方法MergeSort,简单易懂,适合算法初学者。
在C++中,我们可以利用指针和数组来实现MergeSort。下面是一个基本的MergeSort函数模板: ```cpp void merge(int arr[], int l, int m, int r) { // 创建临时数组存放中间结果 int n1 = m - l + 1; int n2 = r -...
在"MergeSort.rar"压缩包中,我们很可能会找到一个C++实现归并排序的例子。现在,我们将深入探讨归并排序的原理、步骤以及C++实现的关键细节。 归并排序的工作原理: 1. 分解:首先,将待排序的序列分为两个相等或...
### MergeSort 算法详解 #### 一、MergeSort 算法概述 MergeSort(归并排序)是一种分治策略的经典应用。它通过递归地将数组...通过对上述代码的深入理解,我们可以更好地掌握 MergeSort 的实现细节及其应用场景。
以下是一个简单的Java归并排序示例: ```java public class MergeSort { public void mergeSort(int[] arr, int left, int right) { if (left ) { int mid = (left + right) / 2; mergeSort(arr, left, mid); /...
插入排序是一种简单直观的排序算法,其工作原理类似于我们日常生活中整理扑克牌的过程。首先,将数组视为已排序的部分和未排序的部分。每次从未排序部分取出一个元素,插入到已排序部分的正确位置,直到所有元素都...
这些C和C++实现涵盖了数据结构和算法的基础,包括排序算法(MergeSort和QuickSort)以及图算法(Floyd-Warshall)。这些知识对于理解和优化计算机程序的性能至关重要,特别是在处理大量数据时。学习和掌握这些基础...
- 对于小规模数据,可以考虑使用插入排序等简单排序算法,因为它们在小规模数据上的效率更高。 - 使用自底向上的归并排序,避免递归带来的栈空间消耗。 总之,归并排序是一种高效的排序方法,尤其适合大数据量且对...
在这个压缩包“MergeSort.zip”中,包含了一个C++实现的归并排序程序,该程序可能是在Visual Studio 2019(VS2019)环境下编译和运行的。下面将详细讲解归并排序的原理、步骤以及C++编程实现的相关知识点。 1. **...
本题目的核心是利用归并排序(Mergesort)算法来实现逆序数的计算,以达到O(n log n)的时间复杂度,避免平方级别的效率消耗。 首先,我们要理解什么是逆序对。在一组排序的整数序列中,如果一个较大的数字位于较小...
在Java中,我们可以定义一个名为`mergeSort3Way`的函数来实现三路归并排序。这个函数接受一个整型数组作为参数,然后调用递归方法`sort3Way`来执行实际的排序工作。`sort3Way`函数中,我们首先检查数组的长度,如果...
归并算法的简单举例
在实现mergesort函数时,我们需要使用递归函数,对原始序列进行分解和排序,首先,我们将原始序列分解成两个子序列,然后对每个子序列递归调用mergesort函数,直到所有子序列都被排序完毕,然后我们将所有子序列合并...
- 当数组规模较小,接近于常数时,可以考虑使用插入排序等更简单的算法,因为对于小规模数据,这些简单算法的效率更高。 7. **应用场景**:归并排序常用于数据库管理系统、文件系统以及需要稳定排序的场景。在...
插入排序是一种简单的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。Java实现如下: ```java void insertionSort(int[] arr) { for (int i = 1; i...
这个编程问题将解决在递归调用上使用迭代循环以及在MERGESORT()中使用INSERTION-SORT()作为过程的优点。 您的程序必须执行以下操作: 打开给定的文件名并读取所有双精度数字。 为简单起见,我们假定此文件仅...
综上所述,一次归并算法不仅理论基础扎实,而且其实现简单、效率高,是非常值得学习和掌握的一种算法。通过对其实现细节的理解,可以帮助开发者更好地应对实际项目中的排序问题,提高程序的执行效率。
在上面的代码中,mergesort函数实现了归并排序算法。该函数将数组分割成小的子数组,然后对这些子数组进行排序,以实现整个数组的排序。 这七种排序算法都有其优缺,选择哪种算法取决于具体的应用场景。
以下是一个简单的并行归并排序的Java实现概念框架: ```java import java.util.concurrent.ForkJoinPool; import java.util.concurrent.RecursiveAction; public class ParallelMergeSort extends RecursiveAction...
以下是一个简单的示例: ```java public class MergeSort { public void mergeSort(int[] arr, int left, int right) { if (left ) { int mid = left + (right - left) / 2; mergeSort(arr, left, mid); ...