[java]插入排序及折半插入排序

来源:互联网 发布:分区表丢失数据恢复 编辑:程序博客网 时间:2024/06/05 21:02
package sort_book_datastruction;import java.util.Arrays;/** * 插入排序:主要是将待排序的元素插入到已经排好序的列表中,从而编程长度加1的有序表; * 具体步骤:例如第i个元素是待排序的元素,则前i-1个元素是已经非递减排列的序列,将第i个元素插入到前面已经排好的序列中, * 该元素从第i-1个元素进行比较,如果大于第i-1个元素,则直接插入; * 如果小于,则第i-1的元素向后移一位,同时比较与第i-2元素的大小,依次向前比较,直到排在了正确的位置。 * 在比较之前,要将可能发生右移的待排序元素建立监视哨。 * @author Administrator */public class InsertSort {    public void insertSort(int[] array){        int length = array.length;        for(int i = 1;i<length;++i){//i表示循环在哪一趟;            if(array[i]<array[i-1]){               int j = i-1;               int key = array[i];//key待排序元素               while(j>=0 && array[j]>key){                  array[j+1] =array[j];                  j--;               }               array[j+1] = key;            }        }    }    /**     * 折半插入排序     * @param array     */    public void insertSort2(int[] array){        int length = array.length;        for(int i =1;i<length;i++){            if(array[i-1]>array[i]){            int key = array[i];//待插入元素            int j = i-1;            int low = 0,high = j;            while(low<=high){                int m = (high - low)/2+low;                if(key<array[m]) high = m-1;                else low = m+1;             }            while(j>=high+1){                array[j+1] = array[j];                j--;            }            array[j+1]=key;            }        }    }    public static void main(String[] args) {        // TODO Auto-generated method stub        InsertSort is = new InsertSort();        int[] a={8,2,5,3,8,11,6,15,9,45,7,5};        is.insertSort(a);        //is.insertSort2(a);        System.out.println(Arrays.toString(a));    }}
原创粉丝点击