gpt4 book ai didi

java高级排序之希尔排序

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 24 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章java高级排序之希尔排序由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

希尔排序对于多达几千个数据项的,中等大小规模的数组排序表现良好,希尔排序不像快速排序和其它时间复杂度为O(n*logn)的排序算法那么快,因此,对非常大的文件排序,它不是最优选择,但是希尔排序比选择排序和插入排序这种时间复杂度为O(n²)的排序要快的多,并且它非常容易实现,代码简短 。

  希尔排序也是插入排序的一种,在插入排序中,如果最小的数在最后面,则复制的次数太多,而希尔解决了这个问题,它也是n-增量排序,它的思想是通过加大插入排序中元素的间隔,并在这些有间隔的元素中进行插入排序,当这些数据项排过一趟序后,希尔排序算法减小数据项的间隔再进行排序,依此进行下去。进行这些排序时数据项之间的间隔被称为增量,并且习惯上用字母h来表示.

  对于某个马上要进行希尔排序的数组,开始的间隔应该更大,然后间隔不段减小,直到间隔变为1. 。

间隔序列:

  间隔序列中的数字素质通常被认为很重要-除了1之外它们没有公约数,这个约束条件使每趟排序更有可能保持前一趟排序已排好的效果,对于不同的间隔序列,有一个绝对的条件,就是逐渐减小的间隔最后一定要等于1.因此最后一趟是一次普通的插入排序.

  下面列出的例子是h=h*3+1的规律得出的:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
package com.jll.sort;
public class ShellSort {
   int [] arr;
   int size;
  
   public ShellSort() {
     super ();
   }
  
   public ShellSort( int size) {
     this .size = size;
     arr = new int [size];
   }
 
   /**
    * @param args
    */
   public static void main(String[] args) {
     ShellSort ss = new ShellSort( 10 );
     for ( int i= 0 ;i< 10 ;i++){
       ss.arr[i] = ( int ) ((Math.random()* 100 )+ 1 );
       System.out.print(ss.arr[i]+ " " );
     }
     ss.shellSort();
     System.out.println();
     System.out.println( "after sort:" );
     for ( int i= 0 ;i< 10 ;i++){
       System.out.print(ss.arr[i]+ " " );
     }
    
   }
  
   public void shellSort(){
     int h = 1 ;
     while (h<=size/ 3 ){
       h = h* 3 + 1 ;
     }
     for (;h> 0 ;h=(h- 1 )/ 3 ){
       for ( int i=h;i<size;i++){
         int temp = arr[i];
         int j = i;
           while (j>h- 1 &&arr[j-h]>temp){
             arr[j]=arr[j-h];
             j-=h;
           }
           arr[j]=temp;
         }
       }
     }
   }

最后此篇关于java高级排序之希尔排序的文章就讲到这里了,如果你想了解更多关于java高级排序之希尔排序的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com