• 数据结构与算法之希尔排序


    希尔排序是插入排序的优化版本.插入排序的思路是每次跟前一个比较,需要交换则交换,然后指针向后移动,再次与前面的比较,如果不需要交换则表示前边的前边也不需要交换.

    希尔排序则是通过添加一个步长的概念,每次把当前元素与增加步长后的元素比较,如果交换则交换.然后再次增加步长去比较,这个过程与插入排序一样.希尔排序与插入排序的

    区别在于希尔排序通过步长将数组划分为子数组,将子数组通过插入排序.而步长也要不断的递减,直到步长是1此时就退化为插入排序.

    这个算法最好情况下时间复杂度:O(n)平均情况下时间复杂度:O((nlog(n))^2)

    public static void xier(int[] arr) {
            int gap = arr.length;
            while ((gap = gap / 2) > 0) {
                for (int i = gap; i < arr.length; i++) {
                    for (int j = i; j >= gap; j -= gap) {
                        if (arr[j] < arr[j - gap]) {
                            int temp = arr[j];
                            arr[j] = arr[j - gap];
                            arr[j - gap] = temp;
                        } else {
                            break;
                        }
                    }
    
                }
            }
        }

    以下代码提供一个测试方法.

    public static void main(String[] args) {
            Random random = new Random();
            while (true) {
                int length = random.nextInt(100);int[] arr = new int[length];
                int[] arr2 = new int[length];
                for (int x = 0; x < length; x++) {
                    int i = random.nextInt(100);
                    arr[x] = i;
                    arr2[x] = i;
                }
                xier(arr);
                Arrays.sort(arr2);
                boolean equals = Arrays.equals(arr2, arr);
                System.out.println(equals);
                if (!equals) {
                    break;
                }
            }
        }
  • 相关阅读:
    MS SQL高级——数据库安全
    括号匹配算法
    中缀表达式转后缀表达式
    栈、队列、数组
    在 Chrome 上删除特定网站的浏览记录
    销售订单 屏幕增加按钮
    SAP SD VA01 销售订单中的自动价格更新
    BAPI_GOODSMVT_CREATE 101 mvt. Message ERROR M7427
    金税NWBC 作废 发送金税按钮 CL_IDGT_OB_CANC_LIST_UIBB
    VKM4 批准功能对应 bapi
  • 原文地址:https://www.cnblogs.com/zumengjie/p/16157441.html
Copyright © 2020-2023  润新知