經典算法系列之:插入排序

1、前言

算法,在計算機中的地位,就相當於人類大腦的決策中樞系統,哪怕最簡單的算法,其精妙的思維方式,都可以讓人開啓一扇新的視窗。

算法,它不僅僅只是狹義的用來解決計算機科學領域的問題,更是一種“思維方式”。算法思維,是一種深度思考和創造的過程。

算法,只有真正理解了,而不只是所謂的知道,並將應用到生活、工作、學習等各個方面,它將一定使人受益終生。

2、原理推導

插入排序,將數組中的每一個元素與它前面的元素遍歷比較,把符合排序條件的元素移到它排序的位置。

給定一組 {9,7,1,5,8,6}的原始無序數組,按照從小到大升序排列,從後往前兩兩比較。

在這裏插入圖片描述

#step1

第1個數字和第2個數字開始兩兩比較,數字 【7】 和 【9】 位置互換,完成第一輪排序。
在這裏插入圖片描述

#step2

第3個數字和前面第1、2個數字開始比較。
第一次比較【1】小於【9】兩個數位置互換結果 {7,1,9,5,8,6}。
第二次比較【1】小於【7】兩個數位置互換結果{1,7,9,5,8,6}完成第二輪比較。
在這裏插入圖片描述

#step3

第4個數字和前面第1,2,3個數字開始比較。
第一次比較【5】小於【9】兩個數位置互換結果{1,7,5,9,8,6}。
第二次比較【5】小於【7】兩個數位置互換結果{1,5,7,9,8,6}。
第三次比較【5】大於【1】則跳出循環,完成第三輪比較。
在這裏插入圖片描述

#step4

第5個數字和前面第1,2,3,4個數字開始比較。
第一次比較【8】小於【9】兩個數位置互換結果{1,5,7,8,9,6}。
第二次比較【8】大於【7】則跳出循環,完成第二輪比較。
在這裏插入圖片描述

#step5

第6個數字和前面第1,2,3,4,5個數字開始比較。
第一次比較【6】小於【9】兩個數位置互換結果{1,5,7,8,6,9}。
第二次比較【6】小於【8】兩個數位置互換結果{1,5,7,6,8,9}。
第三次比較【6】小於【7】兩個數位置互換結果{1,5,6,7,8,9}。
第四次比較【6】大於【5】則跳出循環,完成第四輪比較。
在這裏插入圖片描述

至此,插入排序已經完成。

3、代碼示例

# 排序是前提,假設已經是有序數組

public static void insertSort(int array[] ){    
    int j = 0;    

    //外層循環控制總次數    
    for (int i=1;i<array.length;i++){       
        // 將i的值放到臨時變量中,待一輪比較結束賦值       
        int temp = array[i];        

        //內層循環控制前後兩個數交換的次數        
        for (j=i;j>0;j--){            
            // 正序排列,前一個數大於後一個數,則將前面的數放到後一個數的位置            
            if(array[j-1] >= temp){                
                array[j] = array[j-1];           
            }else{               
                break;            
            }  
    }       

        // 內層循環j--,temp表示數組中後一個數的值交換到前一個位置        
        array[j] = temp;    
    }
}

4、禪定時刻

插入排序,如果後一個數比相鄰的前面一個數大,則不需要再與前面其他數值比對,相比冒泡排序大大減少了交換次數,提高排序效率。在部分已經確定的信息基礎之上,縮小範圍,保證了效率和結果。不變的就是變化,能確定的就是變化。

發佈了5 篇原創文章 · 獲贊 11 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章