• Java排序算法(四):Shell排序


    [基本的想法]

    将原本有大量记录数的记录进行分组。切割成若干个子序列,此时每一个子序列待排序的记录个数就比較少了,然后在这些子序列内分别进行直接插入排序,当整个序列都基本有序时。再对全体记录进行一次直接插入排序。

    所谓的基本有序,就是小的keyword基本在前面,大的基本在后面,不大不小的基本在中间。像{2, 1, 3, 6, 4, 7, 5, 8, 9}这样能够称为基本有序了。


    [java实现]

    public class ShellSort {
    
    	public static void main(String[] args) {
    		int[] arr = { 6, 5, 3, 1, 8, 7, 2, 4 };
    		System.out.println("排序之前:");
    		for (int i = 0; i < arr.length; i++) {
    			System.out.print(arr[i] + " ");
    		}
    
    		// 希尔排序
    		shellSort(arr);
    
    		System.out.println();
    		System.out.println("排序之后:");
    		for (int i = 0; i < arr.length; i++) {
    			System.out.print(arr[i] + " ");
    		}
    	}
    
    	/**
    	 * 希尔排序
    	 */
    	private static void shellSort(int[] arr) {
    		int j;
    		for (int gap = arr.length / 2; gap > 0; gap = gap / 2) {
    			for (int i = gap; i < arr.length; i++) {
    				int tmp = arr[i];
    				for (j = i; j >= gap && tmp < arr[j - gap]; j = j - gap) {
    					arr[j] = arr[j - gap];
    				}
    				arr[j] = tmp;
    			}
    		}
    	}
    
    }
    [算法说明]

    希尔排序时间复杂度:O(nlogn)

    Shell排序是不是一个稳定的排序算法。

    版权声明:本文博客原创文章。博客,未经同意,不得转载。

  • 相关阅读:
    jedis scan实现keys功能
    java简单实现一个阻塞式线程池
    Swift运算符
    数组的使用(1)
    Linux 常用命令
    Task02:基础查询与排序
    Task01:初识数据库
    摩尔投票法
    面向对象暑期课程总结
    xpath+requests+peewee——CSDN论坛全方位爬虫
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/4685335.html
Copyright © 2020-2023  润新知