JAVA实现排序算法(二):两种归并排序
2017-12-06 20:31
344 查看
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 ; 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 @ 4000 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("序列排序失败"); } } }
运行结果如下
相关文章推荐
- 几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- 排序算法复习(Java实现):插入,冒泡,选择,Shell,快速排序, 归并排序,堆排序,桶式排序,基数排序
- 算法代码实现之归并排序,Java实现,自顶向下与自底向上两种方式
- 排序算法Java实现(归并排序)
- 算法 排序算法之归并排序 java实现
- 元素排序几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- 排序算法复习(Java实现)(二): 归并排序,堆排序,桶式排序,基数排序
- 排序算法的java实现-归并排序
- Java实现-高效排序算法之归并排序
- 两种常用排序算法的java实现
- 【常用排序算法】归并排序(Java实现)
- 排序算法总结(二)-------选择,堆,冒泡,快速,归并排序(java实现)
- 排序算法(二)_希尔排序、快速排序、归并排序的Java实现
- 【排序算法】归并排序(java实现)
- 【转】排序算法复习(Java实现) (二): 归并排序,堆排序,桶式排序,基数排序
- 【转】排序算法复习(Java实现)(二): 归并排序,堆排序,桶式排序,基数排序
- 排序算法Java实现——归并排序
- 排序算法(Java实现):Shell排序和归并排序
- 递归和迭代两种方式实现归并排序(Java版)
- 排序算法(五):JAVA实现归并排序