插入排序之折半插入排序

基本思路:折半插入排序(binary insertion sort)是對(duì)插入排序算法的一種改進(jìn),由于排序算法過(guò)程中,就是不斷的依次將元素插入前面已排好序的序列中。由于前半部分為已排好序的數(shù)列,這樣我們不用按順序依次尋找插入點(diǎn),可以采用折半查找的方法來(lái)加快尋找插入點(diǎn)的速度。

步驟:
(1) 將一新的元素插入到有序數(shù)組中,尋找插入點(diǎn)時(shí),將帶插區(qū)域的首元素設(shè)置為a[low],末元素設(shè)置為a[high],比較時(shí)則將待插元素與參考元素a[m](m=(low+high)/2)相比較。;
(2)如果待插元素比參考元素小,則選擇a[low]到a[m-1]為新的插入?yún)^(qū)域(即high=m-1),否則選擇a[m+1]到a[high]為插入?yún)^(qū)域;
(3)如此直到low<=high不成立,即將此位置(low)之后所有元素后移一位,并將新元素插入a[high+1]中。

代碼如下:

public class Binary_Insert_Sort {
    
    public static void main(String[] args){
        int[] a = {1,3,2,5,4,4,4,4,4,4,5,5,5,5,5,5,5,1,1,1,1,2,2,2,3,4,5,7,3,2,2,24,54};
        long start = System.nanoTime();
        sort(a);
        long end = System.nanoTime();
        System.out.println(end-start  + "   " + Arrays.toString(a));
    }
    ////程序運(yùn)行時(shí)間:14639ms
    public static void sort(int[] s){ 
        for(int i = 1; i < s.length; i++){                              
            int temp = s[i];//待插元素
            int low = 0;
            int high = i-1; 
            while(low<=high){
                int mid = (low+high)/2;
                if(temp>s[mid]){//待插元素比中間值大,取m+1到high區(qū)域
                    low = mid+1;
                }else{
                    high= mid-1;
                }
            }
                
            for(int j = i;j>low;j--){//將low后面的數(shù)組整體后移
                s[j]=s[j-1];
            }
            s[low]=temp;
        }
    }
    
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 總結(jié)一下常見(jiàn)的排序算法。 排序分內(nèi)排序和外排序。內(nèi)排序:指在排序期間數(shù)據(jù)對(duì)象全部存放在內(nèi)存的排序。外排序:指在排序...
    jiangliang閱讀 1,514評(píng)論 0 1
  • 概述:排序有內(nèi)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部...
    每天刷兩次牙閱讀 3,819評(píng)論 0 15
  • 概述 排序有內(nèi)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部...
    蟻前閱讀 5,297評(píng)論 0 52
  • 1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 將一個(gè)記錄插入到已排序好...
    依依玖玥閱讀 1,347評(píng)論 0 2
  • 跟我的大小寶貝們分開(kāi)已經(jīng)將近一個(gè)月了。 出來(lái)深圳至今,每天都在想著他們念著他們。 這一個(gè)月里,我在思念里重整狀態(tài),...
    木子林閱讀 275評(píng)論 2 3

友情鏈接更多精彩內(nèi)容