• 希尔排序(插入式与位移式优化)


    package com.dai.sort;
    
    import java.text.SimpleDateFormat;
    import java.util.Arrays;
    import java.util.Date;
    
    import javax.xml.transform.Templates;
    
    public class ShellSort {
    
        public static void main(String[] args) {
            /*
            int[] arr = {8,9,1,7,2,3,5,4,6,0};
            shellSort(arr);
            int[] arr = new int[80000]; 
            for(int i=0; i<80000; i++) {
                arr[i] = (int)(Math.random()*8000000);
            }
            Date date1 = new Date();
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String date1String = simpleDateFormat.format(date1);
            System.out.println("排序前的时间为:" + date1String);
            shellSort(arr);
            Date date2 = new Date();
            String date2String = simpleDateFormat.format(date2);
            System.out.println("排序后的时间为:" + date2String);
    */
            int[] arr = new int[80000]; 
            for(int i=0; i<80000; i++) {
                arr[i] = (int)(Math.random()*8000000);
            }
            Date date1 = new Date();
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String date1String = simpleDateFormat.format(date1);
            System.out.println("排序前的时间为:" + date1String);
            shellSort2(arr);
            Date date2 = new Date();
            String date2String = simpleDateFormat.format(date2);
            System.out.println("排序后的时间为:" + date2String);        
        }
        public static void shellSort(int[] arr) {
            /*
            int temp = 0;
            for(int i=5;i<arr.length; i++) {
                for(int j=i-5;j>=0;j-=5) {
                    if(arr[j] > arr[j+5]) {
                        temp = arr[j];
                        arr[j] = arr[j+5];
                        arr[j+5] = temp;
                    }
                }
            }
            System.out.println(Arrays.toString(arr));
            */
            int temp = 0;
            //int count = 0;
            for( int gap = arr.length/2;gap>0;gap/=2) {
                for(int i=gap;i<arr.length;i++) {
                    //遍历各组中的元素(共gap组)
                    for(int j=i-gap;j>=0;j-=gap) {
                            if(arr[j] > arr[j+gap]) {
                                temp = arr[j];
                                arr[j] = arr[j+gap];
                                arr[j+gap] = temp;
                            }
                    }
                }
                //System.out.println("希尔排序第"+ (++count) + "轮排序结果:" + Arrays.toString(arr));
            }
            
        }
        //对交换式的希尔排序优化:移位法
        public static void shellSort2(int[] arr) {
            //增量gap,并逐步缩小增量
            for(int gap=arr.length/2;gap>0;gap/=2) {
                //从gap个元素开始,逐个对其所在的组进行直接插入
                for(int i=gap;i<arr.length;i++) {
                    int j = i;
                    int temp = arr[j];
                    if(arr[j]<arr[j-gap]) {
                        while(j-gap>=0 && temp < arr[j-gap]) {
                            //移动
                            arr[j] = arr[j-gap];
                            j-=gap;
                        }
                        //退出while循环,就找到了插入的位置
                        arr[j] = temp;
                    }
                }
            }
        }
    }
  • 相关阅读:
    idea 编程字体推荐
    推荐!国外程序员整理的系统管理员资源大全
    jquery阻止事件冒泡的3种方式
    web前端打印总结
    前端打印插件
    object实现小老鼠交互
    前端性能优化(DOM篇)
    输入框获得焦点时外边框颜色改变
    webstorm配置scss自动编译路径
    微信开发测试号配置
  • 原文地址:https://www.cnblogs.com/shengtudai/p/14394254.html
Copyright © 2020-2023  润新知