二分法插入排序的java簡單實現

package com.company;
 import java.util.*;

 import static com.company.Array.printArray;

/**
 * Created by Administrator on 2017/5/2.
 */
public class BinarySort {
    public static void main (String []args){
        int []array={1,2,9,3};
        printArray(array);
        BinInsertSort(array);
        System.out.println("\n");
        printArray(array);
    }

    public static    void BinInsertSort(int a[])
    {
        int key, left, right, middle;
        for (int i=1; i<a.length; i++)
        {
            key = a[i];  //key爲要排的目的值。其前面爲已經排好的數組
            left = 0;
            right = i-1;
            while (left<=right)
            {
                middle = (left+right)/2;
                if (a[middle]>key)
                    right = middle-1;    //比較中值與要排的值大小。更新數組下標left與right的值
//                                             進而縮短要插入的數組長度
                else
                    left = middle+1;
            }

            for(int j=i-1; j>=left; j--)
            {
                a[j+1] = a[j];   //輸出排序後的數組。此時小於更新後的下標left值的數組值都要改變
            }

            a[left] = key;
        }
    }
}
class Array{
    public static void printArray(int[]array){
        for(int i=0;i<array.length;i++){      //數組的輸出,頻繁調用
            System.out.print(array[i]+" ");
        }

    }

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章