`
fx05062219
  • 浏览: 19812 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

简单实现MergeSort

    博客分类:
  • java
阅读更多
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;
	}
}
0
0
分享到:
评论

相关推荐

    合并排序的Java实现方法MergeSort

    合并排序的Java实现方法MergeSort,简单易懂,适合算法初学者。

    sort-使用C++实现的排序算法之MergeSort.zip

    在C++中,我们可以利用指针和数组来实现MergeSort。下面是一个基本的MergeSort函数模板: ```cpp void merge(int arr[], int l, int m, int r) { // 创建临时数组存放中间结果 int n1 = m - l + 1; int n2 = r -...

    MergeSort.rar

    在"MergeSort.rar"压缩包中,我们很可能会找到一个C++实现归并排序的例子。现在,我们将深入探讨归并排序的原理、步骤以及C++实现的关键细节。 归并排序的工作原理: 1. 分解:首先,将待排序的序列分为两个相等或...

    MergeSort

    ### MergeSort 算法详解 #### 一、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语言代码insertion&mergeSort

    插入排序是一种简单直观的排序算法,其工作原理类似于我们日常生活中整理扑克牌的过程。首先,将数组视为已排序的部分和未排序的部分。每次从未排序部分取出一个元素,插入到已排序部分的正确位置,直到所有元素都...

    Floyd,HONER,MatChain,MergeSort,PERM2,QuickSort,RE-PERM2 C和C++实现

    这些C和C++实现涵盖了数据结构和算法的基础,包括排序算法(MergeSort和QuickSort)以及图算法(Floyd-Warshall)。这些知识对于理解和优化计算机程序的性能至关重要,特别是在处理大量数据时。学习和掌握这些基础...

    C++实现归并排序(MergeSort)

    - 对于小规模数据,可以考虑使用插入排序等简单排序算法,因为它们在小规模数据上的效率更高。 - 使用自底向上的归并排序,避免递归带来的栈空间消耗。 总之,归并排序是一种高效的排序方法,尤其适合大数据量且对...

    MergeSort.zip

    在这个压缩包“MergeSort.zip”中,包含了一个C++实现的归并排序程序,该程序可能是在Visual Studio 2019(VS2019)环境下编译和运行的。下面将详细讲解归并排序的原理、步骤以及C++编程实现的相关知识点。 1. **...

    POJ1804-Brainman【借助Mergesort求逆序数O(nlogn)】

    本题目的核心是利用归并排序(Mergesort)算法来实现逆序数的计算,以达到O(n log n)的时间复杂度,避免平方级别的效率消耗。 首先,我们要理解什么是逆序对。在一组排序的整数序列中,如果一个较大的数字位于较小...

    MergeSort:执行三路归并排序

    在Java中,我们可以定义一个名为`mergeSort3Way`的函数来实现三路归并排序。这个函数接受一个整型数组作为参数,然后调用递归方法`sort3Way`来执行实际的排序工作。`sort3Way`函数中,我们首先检查数组的长度,如果...

    归并排序算法(Merge Sort)的Java实现

    归并算法的简单举例

    分治算法实验(用分治法实现归并排序算法)的知识.pdf

    在实现mergesort函数时,我们需要使用递归函数,对原始序列进行分解和排序,首先,我们将原始序列分解成两个子序列,然后对每个子序列递归调用mergesort函数,直到所有子序列都被排序完毕,然后我们将所有子序列合并...

    mergeSort

    - 当数组规模较小,接近于常数时,可以考虑使用插入排序等更简单的算法,因为对于小规模数据,这些简单算法的效率更高。 7. **应用场景**:归并排序常用于数据库管理系统、文件系统以及需要稳定排序的场景。在...

    JAVA写的6种内部排序算法简单实现

    插入排序是一种简单的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。Java实现如下: ```java void insertionSort(int[] arr) { for (int i = 1; i...

    COSC336_MergeSort

    这个编程问题将解决在递归调用上使用迭代循环以及在MERGESORT()中使用INSERTION-SORT()作为过程的优点。 您的程序必须执行以下操作: 打开给定的文件名并读取所有双精度数字。 为简单起见,我们假定此文件仅...

    一次归并算法的简单妙用

    综上所述,一次归并算法不仅理论基础扎实,而且其实现简单、效率高,是非常值得学习和掌握的一种算法。通过对其实现细节的理解,可以帮助开发者更好地应对实际项目中的排序问题,提高程序的执行效率。

    七大排序C语言实现

    在上面的代码中,mergesort函数实现了归并排序算法。该函数将数组分割成小的子数组,然后对这些子数组进行排序,以实现整个数组的排序。 这七种排序算法都有其优缺,选择哪种算法取决于具体的应用场景。

    mergesort:归并排序算法并行顺序实现

    以下是一个简单的并行归并排序的Java实现概念框架: ```java import java.util.concurrent.ForkJoinPool; import java.util.concurrent.RecursiveAction; public class ParallelMergeSort extends RecursiveAction...

    MergeSort:排序算法-合并排序

    以下是一个简单的示例: ```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); ...

Global site tag (gtag.js) - Google Analytics