【基础算法】希尔排序-如何着手理解一个排序算法

【前言】

          最近对重拾了一下之前似懂非懂的一些基础排序算法,收获颇丰。 给大家分享一下心得。

【正文】

我现在复习算法的顺序:

         if   自认为已经理解原理:

           {

                1.尝试自己写代码,写出得不到运行结果,思考调试程序

                2.写不出,复习原理,手写排序过程

            }

        else 不理解原理,如何学习原理:

          {

                1.找网上的代码,敲出来,运行,找个对的。

                2.在纸上按程序手写每一次循环得到的结果。理解原理。

                3.按自己的理解写法改造程序, 看看哪不对, 调试学习。

           } 

package shell;

import java.util.Arrays;

/**
 * @Auther: 宋荣凯
 * @Description:
 * @Date: Created in 3:09 PM 8/3/2017
 * @Modified By:
 **/
public class shell {
    public static void  shellSortSmallTobig(int[] data)
    {
        int j =0;
        int temp=0;
        for(int increment=data.length/2; increment>=1;increment/=2)
        {
            System.out.println("increment:"+increment);
            for (int i = increment; i <data.length ; i++) {
                temp=data[i];
                for (j = i-increment; j>=0 ; j-=increment) {
                    // System.out.println("j:" + j);
                    // System.out.println("temp:" + temp);
                    // System.out.println("data[" + j + "]:" + data[j]);
                    if (temp<data[j])
                    {
                      data[j+increment]=data[j];

                    }else
                    {
                        break;
                    }

                }
                data[j+increment]=temp;
            for (int m=0; m<data.length;m++)
            {
                System.out.print(data[m]+"");
            }
            }
        }

    }
    public static void main(String[] args)
    {
        int[] data=new int[]{1,7,5,4,8,10,12};
        shellSortSmallTobig(data);

        System.out.println(Arrays.toString(data));
    }
}


关于这段代码为了帮助大家思考, 我提几个问题:

   1.为什么变量j要定义在循环外?

   2.为什么data[j+increment]=temp 要写在循环外

   3.i>=1 和写i>0一样吗? 

【总结】

欢迎各位老铁评论回答。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 31
    评论
评论 31
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农胖虎-java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值