JAVA实现排序算法(二):两种归并排序
来源:互联网 发布:爱情电影推荐知乎 编辑:程序博客网 时间:2024/05/16 12:59
JAVA实现排序算法(二):两种归并排序
自顶向下和自底向上归并排序
两种归并排序的介绍如图:
代码如下
package com.lx.sort;import java.util.Arrays;import java.util.Scanner;/** * @ProjectName: [MyAlgorithm] * @Package: [com.lx.sort] * @ClassName: [Example] * @Description: [排序] * @Author: [刘翔] * @CreateDate: [2017年11月12日 下午9:00:14] * @UpdateUser: [刘翔] * @UpdateDate: [2017年11月12日 下午9:00:14] * @UpdateRemark: [说明本次修改内容] * @Version: [v1.0] * */public class Sort { private static String[] aux; //归并所需要的辅助数组 /** * @param @param args * @Description: TODO(归并排序的双头并进取小部分) */ public static void Merge(String[] a, int low, int mid, int high) { int i = low; int j = mid + 1; //String[] aux = a; for (int k = low; k <= high ; k++) aux[k] = a[k]; for (int k = low; k <= high; k++) { if (i > mid) { //左半边用尽取右半边元素 a[k] = aux[j++]; } else if (j > high) { //右半边用尽取左半边元素 a[k] = aux[i++]; } else if (less(aux[j], aux[i])) { //右半边的当前元素小于左半边的当前元素取右半边元素 a[k] = aux[j++]; } else { //右半边的当前元素大于等于于左半边的当前元素取左半边元素 a[k] = aux[i++]; } } } /** * @param @param args * @Description: TODO(自顶向下归并排序) */ public static void MergeSort(String[] a) { aux = new String[a.length]; MergeSort(a, 0, a.length - 1); } public static void MergeSort(String[] a, int low, int high) { int mid = low + ((high - low) / 2); if (high <= low) {return; } MergeSort(a, low, mid); MergeSort(a, mid+1, high); Merge(a, low, mid, high); } /** * @param @param args * @Description: TODO(自底向上归并排序) */ public static void MergeBUSort(String[] a) { int N = a.length; aux = new String[N]; for (int i = 1; i < N; i = i + i) { //i表示子数组大小 for (int low = 0; low < N - i; low = low + i + i) { //low表示子数组的索引位置 Merge(a, low, low + i - 1, Math.min(low + i + i - 1, N - 1)); } } } /** * @Description: TODO(判断v是否比w小) * @param @param args */ private static boolean less(String v,String w) { return v.compareTo(w) < 0; } /** * @Description: TODO(交换字符i和j的位置) * @param @param args */ private static void exch(String[] a,int i,int j) { String t = a[i]; a[i] = a[j]; a[j] = t; } /** * @Description: TODO(用于打印当前序列) * @param @param args */ public static void show(String[] a) { for (int i = 0; i < a.length; i++) { System.out.print(a[i] + " "); } System.out.println(); } /** * @Description: TODO(用于测试字符序列a[]是否有序) * @param @param args */ public static boolean isSorted(String[] a) { for (int i = 1; i < a.length; i++) { if (less(a[i],a[i-1])) { return false; } } return true; } /** * @Title: main * @Description: TODO(用于测试从键盘录入的一列字符是否有序) * @param @param args */ public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入要排序的字符序列,输入的字符序列格式为1,2,3...9"); String str = sc.nextLine(); String[] info = str.split(","); System.out.println("当前序列的顺序是:"); show(info); System.out.println("对当前序列进行排序"); //SelectSort(info); //InsertSort(info); //SelectSort(info); //MergeSort(info); MergeBUSort(info); System.out.println("现在序列的排序是:"); show(info); if (isSorted(info)) { System.out.println("序列已经成功的进行了排序"); } else { System.out.println("序列排序失败"); } }}
运行结果如下
阅读全文
0 0
- JAVA实现排序算法(二):两种归并排序
- 两种归并排序算法的实现:二路归并排序和基本归并排序(虚拟消除递归的二路归并排序)
- 排序算法复习(Java实现)(二): 归并排序,堆排序,桶式排序,基数排序
- 排序算法复习(Java实现)(二): 归并排序,堆排序,桶式排序,基数排序
- 排序算法复习(Java实现)(二): 归并排序,堆排序,桶式排序,基数排序
- 插入排序算法&二路归并排序算法java实现
- 算法分析(二)归并排序原理及java实现
- 简单排序Java实现(二):归并排序,快速排序
- python实现排序算法二:归并排序
- 排序算法之快速排序、归并排序(java实现)
- 归并排序两种实现
- 排序算法java 二 --基数排序、归并排序
- MergeSort(归并排序)算法Java实现
- 日学一算法---归并排序(java实现)
- Java实现算法归并排序(MergeSort)
- Java 归并排序(MergeSort)算法实现
- 归并排序算法(Java实现)
- java实现归并排序算法
- 程序员到高级程序员的10步!
- bzoj1003
- 为Linux桌面关联文件扩展名和打开程序
- POJO JAVABEAN EJB 的区别和联系
- 14ALetter
- JAVA实现排序算法(二):两种归并排序
- Java反射机制详解
- 函数的调用过程,栈帧的创建和销毁
- 深度学习总结(三)——学习率设置
- [转载]2016最流行的Android组件、工具、框架大全
- JAVA实现排序算法(三):希尔排序
- 获取当前日期时间
- 【Scikit-Learn 中文文档】监督学习:从高维观察预测输出变量
- 数据结构实验之图论九:最小生成树