【前言】
最近对重拾了一下之前似懂非懂的一些基础排序算法,收获颇丰。 给大家分享一下心得。
【正文】
我现在复习算法的顺序:
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一样吗?
【总结】
欢迎各位老铁评论回答。