美文网首页
(306)排序-java实现的选择/插入/希尔排序

(306)排序-java实现的选择/插入/希尔排序

作者: 林湾村龙猫 | 来源:发表于2016-08-11 09:09 被阅读611次

    引言

    用java实现的选择排序、插入排序、希尔排序。

    代码(java)

    package org.hirudy.practice;
    
    /**
     * @author: rudy
     * @date: 2016/08/10
     * 选择排序,插入排序,希尔排序的java实现
     */
    public class SortPractice {
        /**
         * 获取调用函数的函数名称
         * @return String
         */
        public static String getMethodName() {
            StackTraceElement traceElement = ((new Exception()).getStackTrace())[2];
            return traceElement.getMethodName();
        }
    
        /**
         * 打印数组
         * @param data T
         * @param <T> T
         */
        public static <T> void printArray(T[] data){
            System.out.print(getMethodName()+":");
            for(T row : data){
                System.out.print(row.toString());
                System.out.print(" ");
            }
            System.out.println("");
        }
    
        /**
         * 交换数组中的两个元素
         * @param data T[]
         * @param i int
         * @param j int
         * @param <T> T[]
         */
        public static <T> void switchArray(T[] data, int i, int j){
            T switchTemp = data[i];
            data[i] = data[j];
            data[j] = switchTemp;
        }
    
        /**
         * 选择排序
         * @param data Comparable[]
         */
        public static void selectSort(Comparable[] data){
            int dataLength = data.length;
            for (int i=0; i< dataLength; i++){
                int min = i;
                for (int j=i; j<dataLength; j++){
                    if (data[min].compareTo(data[j]) > 0){
                        min = j;
                    }
                }
                switchArray(data, i, min);
            }
            printArray(data);
        }
    
        /**
         * 插入排序
         * @param data Comparable[]
         */
        public static void insertSort(Comparable[] data){
            int dataLength = data.length;
            for (int i=0; i< dataLength; i++){
                for (int j=i; j>0 && data[j].compareTo(data[j-1])<0; j--){
                    switchArray(data,j,j-1);
                }
            }
            printArray(data);
        }
    
        /**
         * 希尔排序
         * @param data Comparable[]
         */
        public static void shellSort(Comparable[] data){
            int dataLength = data.length;
            int h = 1;
            while (h < dataLength/3) h = 3*h + 1;
            while (h >= 1){
                for (int i=h; i< dataLength; i++){
                    for (int j=i; j>=h && data[j].compareTo(data[j-h]) < 0;j -=h){
                        switchArray(data,j,j-h);
                    }
                }
                h = h/3;
            }
            printArray(data);
        }
    
    
        public static void main(String[] args){
            Integer[] data = new Integer[]{12,1,7,19,8,2,6,1,5,10,4,3,7};
    //        String[] data = new String[]{"ab","12","xz","aa","ac"};
    
            selectSort(data);
    
            insertSort(data);
    
            shellSort(data);
        }
    }
    

    运行结果

    图1.运行结果

    相关文章

      网友评论

          本文标题:(306)排序-java实现的选择/插入/希尔排序

          本文链接:https://www.haomeiwen.com/subject/fxojsttx.html