zoukankan      html  css  js  c++  java
  • 06_排序_希尔排序

    【原理】

    1.选择一个步长序列T1,T2,T3...,Tk,满足Ti>Tj(i<j),Tk=1。(步长:即每次插入排序的步长)

    2.按步长序列的个数K,对待排序序列进行K趟排序。

    3.每趟排序,根据对应的步长Ti,对待排序列分割成Ti个子序列,分别对子序列进行插入排序。

    【用例】

    待排列数组

    [ 26 53 67 48 57 13 48 32 60 50 ]

    初始化关键字:(此时步长为5)

     

    第一趟结果

    [ 13 48 32 48 50 26 53 67 60 57 ]

    初始化(此时步长为3)

    [ 13 48 32 48 50 26 53 67 60 57 ]

     

    第二趟结果

    [13 48 26 48 50 32 53 67 60 57]

    初始化:此时步长为1

    [13 48 26 48 50 32 53 67 60 57]

    第三趟结果

    [13  26 32 48 48 50 53 57 60 67]

     [代码实现]

    package com.sort;
    
    public class TestShellSort {
        public static void  shellSort(int[] array){
            int length=array.length;
            int i,j;
            int h;    //h为每次的步长
            int temp;
            for(h=length/2;h>0;h=h/2){  //步长每次减小为原来的1/2 
                for(i=h;i<length;i++){ //从array[h]开始,往后。第一次即从中间位置往后开始,第二次往后挪一位
                    temp=array[i];    //保存数据至temp
                    for(j=i-h;j>=0;j=j-h){  //第一次j从0开始,结束该循环。第二次进入该循环j从1开始,因为i增加1了,这段代码保证每次都是步长为h的两个数据在比较
                        if(temp<array[j]){    //如果发现比temp大的数据,将该数据放置在位置array[j+h]
                            array[j+h]=array[j];
                        }else{
                            break;
                        }
                    }
                    array[j+h]=temp;
                }
            }
        }
        public static void main(String[] args){
            int a[]={2,9,0,8,7,1,5,4,3,6};
            shellSort(a);
            for(int i=0;i<a.length;i++){
                System.out.print(a[i]+" ");
            }
        }
    }

    【总结】

    希尔排序的关键并不是随便的分组后各自排序,而是将相隔某个“步长”的数据组成一个新的子序列,实现跳跃式移动,使得排序的效率提高。

    https://i.cnblogs.com/EditPosts.aspx?postid=5716868&update=1

  • 相关阅读:
    Linux 实例如何开启 MySQL 慢查询功能
    20步打造最安全的Nginx Web服务器
    解决java compiler level does not match the version of the installed java project facet
    maven项目重构目录
    【JeeSite】角色和权限的修改
    【JeeSite】区域和菜单管理
    【JeeSite】登录和主题切换
    【JeeSite】用户管理
    一个程序员的故事
    maven项目发布到Tomcat丢失jar包
  • 原文地址:https://www.cnblogs.com/HigginCui/p/5716868.html
Copyright © 2011-2022 走看看