zoukankan      html  css  js  c++  java
  • JAVA希尔排序代码

    希尔算法学习使用代码如下

    import untils.AlgorithmUtils;
    
    import java.util.Arrays;
    
    /**
     * 以下希尔排序算法解释内容来源网上
     * 
     * 希尔排序,也称 递减增量排序算法,是插入排序的一种更高效的改进版本。希尔排序是 非稳定排序算法。
     * 
     * 希尔排序是基于插入排序的以下两点性质而提出改进方法的:
     * 
     * 插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率
     * 但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一
     * 希尔排序是先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行依次直接插入排序。
     * 
     */
    public class Shell {
    
        /**
         * 学习使用
         *
         * @param arr
         */
        public static void studyShellSort(int[] arr) {
    
            System.out.print("原数组: ");
            System.out.println(Arrays.toString(arr));
            System.out.println("开始shell排序:--Start-- ");
    
            int length = arr.length;
    
            for (int len = length / 2; len > 0; len /= 2) {
                boolean flag = true;
                System.out.println("本次步长为: " + len);
                for (int i = len; i < length; i++) {
                    int c = 0;
    
                    for (int j = i - len; j >= 0; c = j -= len) {
                        System.out.println(c + " : 原位置 = " + j + "; 原位置值 = " + arr[j] + ";  对比位置(原位置+步长) = " + (j + len) + "; 对比位置(原位置+步长值) = " + arr[j + len]);
                        System.out.println("原位置与对比位置比对之前为:");
                        System.out.println(Arrays.toString(arr));
                        if (arr[j] > arr[j + len]) {
                            AlgorithmUtils.swap(arr, j, j + len);
                            System.out.println("原位置与对比位置比对之后,需要交换:");
                            System.out.println(Arrays.toString(arr));
                        } else {
                            System.out.println("原位置不大于对比位置,不需要交换");
                        }
                    }
                    System.out.println();
                }
                //本次最终
                System.out.println("最终: " + Arrays.toString(arr));
            }
            System.out.println("shell排序结束:--END-- ");
        }
    }
    
    
    public class AlgorithmUtils {
        public static void swap(int[] arr, int a, int b) {
            arr[a] = arr[a] + arr[b];
            arr[b] = arr[a] - arr[b];
            arr[a] = arr[a] - arr[b];
        }
    
    }
    

    希尔算法作为工具类使用代码如下

    import untils.AlgorithmUtils;
    
    public class Shell {
        /**
         *
         * @param arr 传入数组
         * @return 返回数组
         */
        public static int[] shellSort(int[] arr) {
            int length = arr.length;
            for (int len = length / 2; len > 0; len /= 2) {
                for (int i = len; i < length; i++) {
                    for (int j = i - len; j >= 0; j -= len) {
                        if (arr[j] > arr[j + len]) {
                            AlgorithmUtils.swap(arr, j, j + len);
                        }
                    }
                }
            }
            return arr;
        }
    }
    

     

  • 相关阅读:
    致研究者的一封信
    机器学习简介
    The resource about the Machine Learning(Cont.)
    哈佛箴言
    Google图片搜索新算法 图片版PageRank
    top conferences and journals in Machine Learning
    做科研的几点体会
    数百本外文数学EBOOK免费下载
    Machine Learning Algorithm Tutorials
    在批处理中实现等待/延迟/暂停
  • 原文地址:https://www.cnblogs.com/coder-ahao/p/14225293.html
Copyright © 2011-2022 走看看