Java的简单应用之插入排序和shell排序

来源:互联网 发布:ubuntu 安装iso文件 编辑:程序博客网 时间:2024/06/08 14:16

理解了插入排序,就相当于理解了一半的shell排序

今天简单的理一理插入排序和shell排序的关系,重点还是为java的用法练一练手

插入排序

这个我就不多说了,核心思想就是for循环;while循环;以及逻辑思维的应用。

核心代码

static void sort(int[]a){    int i,j,temp;    for(i=1;i<a.length;i++){        j=i-1;        temp=a[i];        while(j>=0&&temp<a[j]){            a[j+1]=a[j];            j-=1;        }        a[j+1]=temp;    }}

上述代码是核心,理解了就绝对没问题了。

完整代码java版

package Sort;import java.math.*;public class insertionsort {    static final int size=10;    static void sort(int[]a){    int i,j,temp;    for(i=1;i<a.length;i++){        j=i-1;        temp=a[i];        while(j>=0&&temp<a[j]){            a[j+1]=a[j];            j-=1;        }        a[j+1]=temp;    }    }    public static void main(String[] args) {        // TODO 自动生成的方法存根        int a[]=new int[size];        System.out.println("before the sort:");        for(int i=0;i<size;i++){            a[i]=(int)(Math.random()*100+100);            System.out.print(a[i]+" ");        }        sort(a);        System.out.println("\nafter the sort:");        for (int i = 0; i < a.length; i++) {            System.out.print(a[i]+" ");        }    }}

没啥难度,重点还是对整个流程的掌握。

shell排序

它其实是插入排序的升级版,记住是变步插入即可。

核心代码

static void sort(int[]a){        int r,i,j,temp;        for(r=a.length/2;r>=1;r/=2){            for(i=r;i<a.length;i++){                j=i-r;                temp=a[i];                while(j>=0&&temp<a[j]){                    a[j+r]=a[j];                    j-=r;                }                a[j+r]=temp;            }        }    }

这个注意看,这里我采用的是每次减少数组总长的一半来变步,当然你也可以选择自己合适的变步,都是可以的。

完整代码java版

package Sort;import java.math.*;public class Shellsort {    static final int size=10;    static void sort(int[]a){        int r,i,j,temp;        for(r=a.length/2;r>=1;r/=2){            for(i=r;i<a.length;i++){                j=i-r;                temp=a[i];                while(j>=0&&temp<a[j]){                    a[j+r]=a[j];                    j-=r;                }                a[j+r]=temp;            }        }    }    public static void main(String[] args) {        // TODO 自动生成的方法存根        int []a=new int[size];        System.out.println("before shellsort:");        for (int i = 0; i < a.length; i++) {            a[i]=(int)(100*Math.random()+100);            System.out.print(a[i]+" ");        }        System.out.println("\nafte shellsort:");        sort(a);        for (int i = 0; i < a.length; i++) {            System.out.print(a[i]+" ");        }        System.out.println();    }}

小结

总体来说,java这门语言用起来还是挺舒服的,当然有一半的功劳归结于本身的语言结构特性,毕竟是纯面对对象嘛,还有一半就是这个智能化的代码自动补全了,修改之后,简直不要不要的。
PS : java 的println和print还是有区别的,打印int型后紧接着打印string型,一定要记得及时清空掉int型后面的结束符,要不然string 就打印不出来了

原创粉丝点击