插入排序

来源:互联网 发布:淘宝禁售手机充值了 编辑:程序博客网 时间:2024/06/18 14:08
//3.1 简单插入排序    private static void insertSort(int[] a) {        //依次把每元素拿来插入到有序序列当中(从第2个开始,到最后就行)        for(int i=0;i<a.length-1;i++){//趟数            //待插入的数            int temp = a[i+1];            //下面这一段其实是决定temp坐的位置(j+1) 及 让其它比temp大的数挪动一个位置            int j=i;            while(a[j]>temp){//如果有序序列中"第j位置的数" 比 "待插入的数" 大,则把 a[j]往后挪一个位置                a[j+1] = a[j];//让a[j]挪到j+1的位置                j--;                if(j<0){                    break;                }            }            //让temp坐在第j个数的后面即 j+1的位置            a[j+1] = temp;        }    }
//3.2 加入二分查找的插入排序    private static void binaryInserSort(int[] a) {        for(int i=0;i<a.length-1; i++){//趟数,每一趟是插入第"i+1"个数            //待插入的数            int temp = a[i+1];            //用二分来决定待插入的位置            int low=0;            int high=i;            int mid;//中间位置            while(low<=high){                mid = (low+high)/2;                //用中间位置的元素和当前待插入的数(temp)比较                if(a[mid]>temp ){ //落在左半区                    high = mid-1;                }else{//落在右半区                    low = mid+1;                }            }            //上面这一段只是找到插入位置            //移位,把待插入位置腾出来            for(int j=i; j>high; j--){                a[j+1] = a[j];            }            //让temp坐在第high+1的位置            a[high+1] = temp;//a[low] = temp;        }    }
0 0
原创粉丝点击