算法:两种步长的希尔排序算法

本文介绍了两种不同的希尔排序算法实现方式,一种使用递减步长进行排序,另一种采用增量序列法。通过具体代码示例展示了每种算法的工作原理,并提供了排序过程的详细解释。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

算法:两种希尔排序算法

 1 /**
 2  * 希尔排序
 3  * 不同步长的算法
 4  * @author mackxu
 5  *
 6  */
 7 class ShellSort {
 8     private int[] a = {5,2,4,3,1};
 9     private int nElems = 5;
10     
11     public ShellSort() {
12         
13     }
14     
15     public void display() {
16         for(int elem : a) {
17             System.out.print(elem + " ");
18         }
19         System.out.println();
20     }
21     /**
22      * 外循环确定步长大小
23      * 中循环
24      * 内循环
25      */
26     public void shell_sort() {
27         int in, temp;
28         for (int gap = nElems/2; gap>0; gap/=2) {
29             for (int out=gap; out<nElems; out++) {            
30                 temp = a[out];        //待排的元素
31                 in = out;
32                 //while循环中的两个判断条件
33                 while(in>gap-1 && a[in-gap]>temp){
34                     a[in] = a[in-gap];
35                     in -= gap;
36                 }
37                 a[in] = temp;                
38             }
39         }
40         
41     }
42     
43     public void shell_sort2() {
44         int out, in;
45         int temp;
46         
47         //获取最大步长
48         //可取值有4、13、40、121、364、1093....
49         int gap = 1;
50         while(gap<=nElems/3)
51             gap = gap*3 + 1;
52         while(gap>0) {
53             for(out=gap; out<nElems; out++) {
54                 temp = a[out];            //待排的元素
55                 in = out;
56                 while(in>gap-1 && a[in-gap]>=temp) {
57                     a[in] = a[in-gap];    //值大的后移, 腾出位置,等待填充
58                     in -= gap;
59                 }
60                 a[in] = temp;            //找到合适的位置,填充进去
61             }
62             gap = (gap-1)/3;            //改变步长
63         }
64         
65     }    
66 }

转载于:https://www.cnblogs.com/mackxu/archive/2012/10/26/2741188.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值