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