JAVA实现排序算法(三):希尔排序

来源:互联网 发布:爱情电影推荐知乎 编辑:程序博客网 时间:2024/06/06 00:04

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 {        /**         * @param @param args         * @Description: TODO(希尔排序)         */        public static String[] ShellSort(String[] a) {            int N = a.length;            int h = 1;            while (h < N / 3) {   //设定步长1.4.13.40.。。。。                h = 3 * h + 1;            }            while (h >= 1) {  //将数组变成h有序                for (int i = h; i < N; i++) {                    for (int j = i; j >= h && less(a[j], a[j - h]); j = j - h) {                        exch(a, j, j - h);                    }                    h = h / 3;                }            }            return a;        /**        * @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
原创粉丝点击