• 排序算法之希尔排序


     

    1. 基本介绍

      希尔排序是希尔在1959年提出的一种排序算法,也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也成为缩小增量排序

    2. 基本思想

      希尔排序是把记录按照下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分为一组,算法便终止

    3.  代码展示(下面代码中包括两种方式实现希尔排序,他们的排序速度有很大的区别,感兴趣的小伙伴可以自己亲自测一下)

    package com.gcy.sort;

    import java.util.Arrays;

    import org.omg.CORBA.PUBLIC_MEMBER;

    /**
    * 希尔排序
    * @author Administrator
    *
    */
    public class ShellSort {

    public static void main(String[] args) {
    int [] arr= {8,9,1,7,2,3,5,4,6,0};
    System.out.println("排序前的数组"+Arrays.toString(arr));
    //shellSort(arr);
    shellSort2(arr);
    System.out.println("排序后的数组"+Arrays.toString(arr));
    }
    /**
    * 希尔排序交换法
    * @param arr
    */
    public static void shellSort(int [] arr) {
    int temp=0;
    for(int gap=arr.length/2;gap>0;gap/=2) {
    for(int i=gap;i<arr.length;i++) {
    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;
    }
    }
    }
    }
    }
    /**
    * 对交换式的希尔排序进行优化————》使用移位法
    * @param arr
    */
    public static void shellSort2(int [] arr) {
    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循环退出后,就给temp找到了插入的位置
    arr[j]=temp;

    }
    }
    }
    }










    //具体的分析
    /*int temp=0;
    //希尔排序第一轮排序
    //因为第一轮排序,是将10个元素分成了5组
    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));*/

    }

    结果:

  • 相关阅读:
    贝赛尔曲线实现填充不规则图形,并且随手指运动
    当view为wrap_conten时获取一个view的具体宽高
    Scrapped or attached views may not be recycled
    installation failed with message INSTALL_FAILED_INSUFFICIENT_STORG
    RecycleView设置顶部分割线(记录一个坑)
    Java list.remove( )方法需要注意的地方
    JAVA forname classnotfoundexception 错误
    调用android的getColor()方法出现 java.lang.NoSuchMethodError: android.content.res.Resources.getColor
    JSONObject.parseObject
    设置抓包工具Fiddler的host
  • 原文地址:https://www.cnblogs.com/juddy/p/13768831.html
Copyright © 2020-2023  润新知