java插入排序

来源:互联网 发布:数据流程图例题 编辑:程序博客网 时间:2024/05/16 08:50

1.直接插入排序

     基本思想:拿出一个基准元素,来和前面已经排好序的数组逐a个比较,是从小到大排的话,如果基准数比前面最后一个都大,那再前面的输就不需要比了,直接就可以放在后面了,如果基准元素比前面的数i小,则把这个i往后移,继续和其他的数比较,最后就可以知道这个基准元素要放的位置了。

   代码:

public class Direct {    public static void main(String[] args){        int[] a={5,9,3,21,49,1,99,99};        for (int i = 0; i <a.length ; i++) {            System.out.print(a[i]+" ");        }       for(int i=1;i<a.length;i++){ //从第二个数开始,第一个数没意义比较           int temp=a[i]; //拿出要比较的数           int j=0;           for(j=i-1;j>=0;j--){  //i位置之前是已经排好了的,从后往前比较               if(a[j]>temp){    //一次比较i位置之前的数,如果比要比较的数小,则把j这个位置的数往后移                   a[j+1]=a[j];               }else {                   break;               }           }           a[j+1]=temp;//前面往后移只是依次赋值,最后要还要等一轮比较后,再把要比较的值放入合适的位置,不然会出现重复出现一样的值       }        System.out.println();        for (int i = 0; i <a.length ; i++) {            System.out.print(a[i]+" ");        }    }}
结果:

2.二分法插入:

基本思想:

二分法插入排序是在插入第i个元素时,对前面的0~i-1元素折半,跟他们中间的那个元素比,如果比它小,则对前一半再进行折半,否则对后一半进行折半,直到left>right,最后就可以找到第i个元素要放的位置了,然后再把第i-1位与目标位置之间的所有元素后移,再把第i个元素放在目标位置上。

  代码:

  

public class Binary {    public static void main(String[] args) {        int[] a={5,4,5,3,21,49,1,99,99};        for (int i = 0; i <a.length ; i++) {            System.out.print(a[i]+" ");        }        System.out.println("\n---------");        for(int i=1;i<a.length;i++){            int left=0;            int right=i-1;            int mid=0;            int temp=a[i]; //要比较的数            while(left<=right){  //找到合适的位置,其实最后是left=rigt+1                mid=(left+right)/2;                if(a[mid]>temp){                    right=mid-1;                }else {                    left=mid+1;                }            }            System.out.println(left+":"+right);            for(int k=i-1;k>=left;k--){  //从left开始全部往后移                a[k+1]=a[k];            }             a[left] = temp; //最后把要比较的数放在left位置上            for (int j = 0; j <a.length ; j++) {                System.out.print(a[j]+" ");            }            System.out.println();        }        System.out.println("最终结果");        for (int i = 0; i <a.length ; i++) {            System.out.print(a[i]+" ");        }    }}

 结果:

  

0 0
原创粉丝点击