数据结构复习之–“2路归并排序”-JAVA实现
来源:互联网 发布:淘宝直播招聘主播吗 编辑:程序博客网 时间:2024/06/04 18:57
归并排序的时间复杂度为:O(nlogn)
和快速排序以及堆排序相比较,归并排序的最大特点是,它是一种稳定的排序方法。
一般的情况下很少利用2路归并排序进行内部排序。
尽管递归形式的2路归并算法在形式上较为简洁,但是实用性很差
Java 实现递归形式的二路归并算法如下,参考的严蔚敏的数据结构书中所写:
import java.util.Scanner;public class MergeSortTest { /** * function:将inputData数组中连个相邻子序列进行归并,两个子序列分别有序 归并inputData[s..i] inputData[i+1..t] * @param inputData 待排序子序列 * @param tempData 临时交换空间 * @param s inputData中第一个子序列的开始位置 , * @param i inputData第一个字序列的结束位置 * @param t inputData第二个子序列的结束位置 */ private static void Merge(int[]inputData,int[] tempData,int s,int i, int t){ int p,q,k; //将inputData[s--i]与inputData[i+1--t]中的元素逐个取出按大小放到tempData数组中的对应位置 for(p=s,q=i+1,k=s;p<=i && q<=t;k++){ if(inputData[p]<=inputData[q]) tempData[k]=inputData[p++]; else tempData[k]=inputData[q++]; } //将还未完全取出的子序列的元素放到tempData数组末尾 if(p<=i) while(p<=i && k<=t) tempData[k++]=inputData[p++]; if(q<=t) while(q<=t && k<=t) tempData[k++]=inputData[q++]; } /** * function: 将inputData[s..t]归并为tempData[s..t] * @param inputData 待排序数据 * @param tempData 存放排好序的数据 * @param s inputData开始排序位置 * @param t inputData结束排序位置 */ public static void MergeSort(int[] inputData, int []tempData, int s, int t){ if(s==t) tempData[s]=inputData[s]; else{ int mid = (s+t)/2; //将inputData[s..t]平分为inputData[s..mid] inputData[mid+1..t] int[] temp = new int[inputData.length]; MergeSort(inputData,temp,s,mid); //递归地将inputData[s..mid]进行归并排序 MergeSort(inputData,temp,mid+1,t); //递归地将inputData[mid+1,t]进行归并排序 Merge(temp,tempData,s,mid,t); //将temp2[s..mid]和temp[mid+1..t]进行归并 } } private static int[] getData(){ //从控制台读入数据 Scanner sc = new Scanner(System.in); System.out.print("请输入待排序数据总数:"); int totalNums = sc.nextInt(); int [] array = new int[totalNums]; System.out.print("请输入待排序数据,以空格作为分隔符:"); for (int i = 0; i < totalNums; i++) { array[i]=sc.nextInt(); } return array; } private static void show(int[] array){ for (int i = 0; i < array.length; i++) { System.out.print(array[i]+" "); } } public static void main(String[] args){ int[] inputData=MergeSortTest.getData();//读取数据 MergeSortTest.MergeSort(inputData,inputData,0,inputData.length-1);//2路归并排序 MergeSortTest.show(inputData);//显示排序好的数据 }}
阅读全文
0 0
- 数据结构复习之–“2路归并排序”-JAVA实现
- java数据结构排序之归并排序实现
- 数据结构之归并排序的Java实现
- java实现排序算法之归并排序(2路归并)
- 数据结构复习之–“插入排序”-JAVA实现
- 数据结构复习之–“冒泡排序”-JAVA实现
- 数据结构复习之–“快速排序”-JAVA实现
- 数据结构复习之–“选择排序”-JAVA实现
- 数据结构复习之–“堆排序”-JAVA实现
- 数据结构复习之–“Shell排序”-JAVA实现
- 复习之归并排序
- 算法复习之两路归并排序
- 数据结构之归并排序(递归实现)
- 数据结构之归并排序(迭代实现)
- 数据结构之---C语言实现归并排序
- 数据结构之归并排序的实现
- (十一)数据结构之归并排序算法实现
- 归并排序之java实现
- 解决spark运行中ERROR Shell:Failed to locate the winutils binary in the hadoop binary path的问题
- Python3:《机器学习实战》之决策树算法(2)画个儿时的树
- mybatis一对一映射,记录
- 软考-数据结构与算法
- 浅谈时间复杂度【帆帆帆笔记系列】
- 数据结构复习之–“2路归并排序”-JAVA实现
- 数学 随rand
- bzoj4586: [Usaco2016 Open]Landscaping
- 学习嵌入式Linux系统开发基础 第二课(Linux常用命令)
- laravel 5.5 -- router
- HDU 2844 Coins【多重背包】
- 使用下拉列表
- 面试题总结——JAV
- 【剑指offer】面试题7:两个栈实现队列