01归并排序算法的JAVA实现
package Utils.Sort;
/**归并排序,要求待排序的数组必须实现Comparable接口 */
public class MergeSort implements SortStrategy
{ private Comparable[] bridge;
/** 利用归并排序算法对数组obj进行排序*/
public void sort(Comparable[] obj)
{ if (obj == null)
{ throw new NullPointerException("The param can not be null!");
}
bridge = new Comparable[obj.length]; //初始化中间数组
mergeSort(obj, 0, obj.length - 1); //归并排序
bridge = null;
}
/**
*将下标从left到right的数组进行归并排序
*@param obj 要排序的数组的句柄
*@param left 要排序的数组的第一个元素下标
*@param right 要排序的数组的最后一个元素的下标
*/
private void mergeSort(Comparable[] obj, int left, int right)
{ if (left < right)
{ int center = (left + right)/2;
mergeSort(obj, left, center);
mergeSort(obj, center + 1, right);
merge(obj, left, center, right);
}
}
/**
*将两个对象数组进行归并,并使归并后为升序。归并前两个数组分别有序
*@param obj 对象数组的句柄
*@param left 左数组的第一个元素的下标
*@param center 左数组的最后一个元素的下标
*@param right 右数组的最后一个元素的下标
*/
private void merge(Comparable[] obj, int left, int center, int right)
{ int mid = center + 1;
int third = left;
int tmp = left;
while (left <= center && mid <= right)
{ //从两个数组中取出小的放入中间数组
if (obj[left].compareTo(obj[mid]) <= 0)
{ bridge[third++] = obj[left++];
} else
bridge[third++] = obj[mid++];
}
//剩余部分依次置入中间数组
while (mid <= right)
{ bridge[third++] = obj[mid++];
}
while (left <= center)
{ bridge[third++] = obj[left++];
}
//将中间数组的内容拷贝回原数组
copy(obj, tmp, right);
}
/**
*将中间数组bridge中的内容拷贝到原数组中
*@param obj 原数组的句柄
*@param left 要拷贝的第一个元素的下标
*@param right 要拷贝的最后一个元素的下标
*/
private void copy(Comparable[] obj, int left, int right)
{ while (left <= right)
{ obj[left] = bridge[left];
left++;
} }
}
分享到:
相关推荐
排序算法是算法中的一大类,书中可能会包括冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序等。这些排序算法各有优劣,了解它们的工作原理和性能特点,能帮助我们在实际开发中选择最适合的排序方法。 ...
资源名称:Java常用算法手册内容简介:现代的设计任务大多通过计算机编程来完成,而算法起到了至关重要的作用。可以毫不夸张地说,算法是一切程序设计的灵魂和基础。选择合理的算法,可以起到事半功倍的效果。 赵...
本文将深入探讨标题"常用排序算法java演示"中涉及的知识点,包括排序算法的原理、Java实现方式以及其在实际应用中的图形演示。 首先,让我们逐一了解几种常见的排序算法: 1. **冒泡排序(Bubble Sort)**:这是一...
《Java常用算法手册》是一本深入探讨Java编程中常见算法的实用指南,旨在帮助开发者提升在实际工作中解决复杂问题的能力。...通过阅读这本书,你可以系统地学习和实践Java中的算法,为你的职业生涯增添更多的可能。
通过阅读这些源代码,不仅可以学习到如何在Java中实现各种算法,还能了解到如何优化代码性能,提升解决问题的能力。此外,这些源代码也可以作为实际项目中的参考,帮助开发者快速解决遇到的计算问题。 总的来说,这...
排序算法是编程中最基本也是最常用的算法之一,在Java中有着广泛的应用场景。以下是一些常见的排序算法: - **冒泡排序**:通过重复地遍历待排序列表,比较相邻元素并交换位置,直至无须再交换。 - **选择排序**:...
除了以上介绍的四种排序算法外,Java中还有以下几种常用的排序算法: 1. **冒泡排序**:每次比较两个相邻的元素,如果它们的顺序错误就把它们交换过来。遍历所有元素之后,最大的元素就会被放到最后的位置上。然后...
1. **排序算法**:包括快速排序、归并排序、冒泡排序、插入排序、选择排序等。这些排序算法各有优缺点,适用于不同的数据结构和场景。例如,快速排序在平均情况下有较高的效率,而归并排序则能保证稳定的排序性能。 ...
Java经典算法 ,各种排序算法 老掉牙 河內塔 費式數列 巴斯卡三角形 三色棋 老鼠走迷官(一) 老鼠走迷官(二) 騎士走棋盤 八個皇后 八枚銀幣 生命遊戲 字串核對 雙色、三色河內塔 背包問題(Knapsack...
《Java常用算法手册》是一本深入浅出的编程资源,主要涵盖了Java编程语言中的各种常见算法,对于学习和提升Java编程技巧以及理解算法思想具有重要价值。这份手册以实际可运行的代码为载体,使读者能够直观地看到算法...
这份源代码可能包括排序算法、查找算法、图论算法、动态规划、回溯法、贪心算法等多个方面。例如: 1. **排序算法**:快速排序、归并排序、冒泡排序、插入排序、希尔排序、堆排序等,这些都是基础且重要的数据组织...
这本"Java常用算法手册源码"集合了Java编程中常见的算法实现,对于学习和提升Java算法能力非常有帮助。以下将对其中涉及的主要算法进行详细介绍: 1. 排序算法: - 冒泡排序:基础排序算法,通过不断交换相邻元素...
以下是对Java中几种常见排序算法的详细解析: 1. 冒泡排序: 冒泡排序是一种简单直观的排序算法,通过不断交换相邻的不正确顺序元素来达到排序的目的。它的时间复杂度为O(n^2),在处理大量数据时效率较低。尽管效率...
Java排序算法实现 Java排序算法实现 Java排序算法实现
以上介绍了Java中常用的四种排序算法,分别是插入排序、选择排序、冒泡排序和快速排序。这些排序算法各有特点,适用于不同的场景。例如,当数据量较小时,可以选择插入排序或选择排序;当数据量较大时,快速排序通常...