插入排序

插入排序:

算法思想:每步将一个待排序的记录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。

举例: 8 6 2 3 1 5 7 4

    第一个与元素默认为排序好的,i 的范围 (i=1...n-1)

     j 每次表示当前元素,j 的初始值为i,依次向前比较,是否比前一个数小,小的话,插入,否则不动。

   第一次 i = 1,j = 1 6 和 8 比较 ,6比8小,将8后移, 6 填补上去 此时 6 8 2 3 1 5 7 4

  第二次 i = 2, j = 2  2和 8比较,2比8小,8后移,此时为 6 8 8 3 1 5 7 4,  j-1, 8比 6 大,不变,此时将2 填补上去。 6 2 8 3 1 5 7 4

  第三次 i = 3,j =3  3 和 8比较 ,3比8 小  8后移 ,此时为 6 2 8 8 1 5 7 4  j-1 ,8比2 大 ,不变 ,此时再将3填补上去, 6 2 3 8 1 5 7 4. 以此类推

 public void insertSort(Comparable[] arr){
        int n = arr.length;
        //默认第一个元素是已经拍好的
        for (int i = 1; i <n;i++) {
            //当前要考察的元素,是不是比他前面小,在插入,  当前位置
            //写法一
           /* for (int j = i;j >0;j--)
            {
               if((arr[j]).compareTo(arr[j-1])<0){
                   swap(arr,j,j-1);

               }else{
                   break;
               }*/
            //写法二

            Comparable e = arr[i];
            int j = i;
            for( ; j > 0 && arr[j-1].compareTo(e) > 0 ; j--)
                arr[j] = arr[j-1];
              arr[j] = e;
            }

        }


    private void swap(Object arr[],int i,int j){
        Object temp = arr[i];
        arr[i] = arr[j];
        arr[j] =temp;


    }
    public static void main(String [] arg){
        SortHelper  helper = new SortHelper();
      
       Integer  arr[] = {9,4,5,2,7,18,31,0,6,3};

        InsertSort1  s1= new InsertSort1();
        s1.insertSort(arr);
       // double  time2 = System.currentTimeMillis();
        System.gc();
        for (int i :arr) {
            System.out.print(i +" ");

        }
      
    }

         

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值