zoukankan      html  css  js  c++  java
  • Shell排序

    如何用一句话清晰明了的介绍shell排序呢?

      从第一个元素开始,对间距为h的元素进行排序,排好后再从第二个元素与间隔h的元素开始往后排......直到排到第h个元素,这样就能保证所有元素都按间隔h排了一遍,保证元素与间隔h的元素之间是有序的。然后按h = (h-1)/3不断缩小h再排序一遍,缩小一次排一遍,一点点缩小间隔到保证间隔为1的元素之间都是有序的。

      这样较直接插入排序而言,减少了数组元素的移动次数。

    ======================================================

    package sort_1;
    
    public class ShellSort {
        
        public static void shellSort(DataWrap[] data)
        {
            int arrayLength = data.length;
            int h = 1;
            while(h<arrayLength/3)
                h = h*3 -1;
            while(h>0)
            {
                System.out.println("===的h值:"+h+"===");
                for(int i = h;i<arrayLength;i++)
                {
                    DataWrap temp = data[i];
                    if(data[i].compareTo(data[i-h])<0)
                    {
                        int j = i - h;
                        for(;j>=0&&data[j].compareTo(temp)>0;j-=h)
                        {
                            data[j+h] = data[j];
                        }
                        data[j+h]=temp;
                    }
                    System.out.println(java.util.Arrays.toString(data));
                }
                
                h = (h-1)/3;
            }
        }
        
        public static void main(String[] args)
        {
    
            DataWrap[] data = new DataWrap[]{
                    new DataWrap(2,""),
                    new DataWrap(5,""),
                    new DataWrap(1,""),
                    new DataWrap(3,""),
                    new DataWrap(6,""),
                    new DataWrap(9,""),
                    new DataWrap(8,""),
                    new DataWrap(4,""),
                    new DataWrap(7,""),
                    new DataWrap(0,""),
                    new DataWrap(11,""),
                    new DataWrap(10,""),
            };
            ShellSort.shellSort(data);
    //        System.out.println(java.util.Arrays.toString(data));
        }
    
    }
  • 相关阅读:
    socket套接字 struct模块
    网络编程 OSI七层协议
    内置方法 eval | exec 元类 单例
    选课系统
    iOS清理缓存 2016-04-19
    iOS 蓝牙 技术
    iOS人脸识别
    iOS 指纹识别
    极光推送的初步配置及其使用
    iOS 加急审核
  • 原文地址:https://www.cnblogs.com/xu-thinking/p/3330015.html
Copyright © 2011-2022 走看看