兩個數組:待排序數組
disorderArray
和有序數組orderArray
從待排序數組中取一個數disorderArray[i]
依次和有序數組中每一個數比較
小於元素orderArray[j]
時
先將位置j
及以後的元素向後移動一位
再插入到位置j
上
一直都不小於,
則直接插入到orderArray[orderArray.length]
上算法
disorderArray[i]
和orderArray[j]
比較時:
從左向右,條件disorderArray[i]<orderArray[j]
從右向左,條件disorderArray[i]>orderArray[j]
若是加上等於,能夠少比較一次,可是要多作一次移動數組
function InsertSort(disorderArray) { var i, j, k; var orderArray = []; //第0個元素不用排序 orderArray[0] = disorderArray[0]; //從第1個元素開始,依次取出待排序數組中的元素 for (i = 1; i < disorderArray.length; i++) { //依次和有序數組元素比較 for (j = 0; j < orderArray.length; j++) { //小於等於元素,則找到了要插入的位置orserArray[j] if (disorderArray[i] < orderArray[j]) { break; } //若是j == orderArray.length,那麼disorderArray[i]是最大的 //直接插入到j位置,不用再移動orderArray } //將位置j及以後的元素後移一位,j == orderArray.length時正好跳過循環 for (k = orderArray.length; k > j; k--) { //有序數組會增1,從length+1開始從後向前到j插入到j+1 orderArray[k] = orderArray[k - 1]; } //插入到合適的位置 orderArray[j] = disorderArray[i]; } console.log(orderArray); } var disorderArray = [5, 3, 8, 1, 6, 4]; InsertSort(disorderArray);
一個數組:
orderArray
首先將orderArray[0]
當作有序數組
而後從orderArray[1]
開始插入到有序數組中
目標就是將待排部分所有插入到有序部分code
function InsertSort(orderArray) { //輔助交換 var temp; //依次取出待排序部分的元素orderArray[i],從1開始 for (var i = 1; i < orderArray.length; i++) { //待排部分和有序部分從右向左進行比較 for (var j = i - 1; j >= 0; j--) { //待排元素大於則插入,找到要插入的位置j+1 if (orderArray[i] >= orderArray[j]) { break; } } temp = orderArray[i]; //待排元素位置到插入位置之間的元素須要移動 for (i; i > j + 1; i--) { orderArray[i] = orderArray[i - 1]; } orderArray[j + 1] = temp; } } var orderArray = [9, 3, 7, 1, 4, 2, 5, 0, 6, 8] InsertSort(orderArray); console.log(orderArray);
待排部分和有序部分比較時
若待排元素小於有序元素,則將有序元素後移
若待排元素大於等於有序元素,則待排元素位置肯定,插入該位置
跳出這次循環
目標任然是將待排元素插入到有序部分排序
比較條件寫到
for
循環中io
function InsertSort(orderArray) { //輔助交換 var temp; //依次取出待排序部分的元素orderArray[i],從1開始 for (var i = 1; i < orderArray.length; i++) { temp = orderArray[i]; //待排部分和有序部分從右向左進行比較 for (var j = i - 1; j >= 0 && temp < orderArray[j]; j--) { //待排元素小於則後移 orderArray[j + 1] = orderArray[j]; } //待排元素插入 orderArray[j + 1] = temp; } } var orderArray = [9, 3, 7, 1, 4, 2, 5, 0, 6, 8] InsertSort(orderArray); console.log(orderArray);
待排部分和有序部分比較時
若待排元素小於有序元素,則二者進行位置交換,繼續比較
若待排元素大於等於有序元素,則待排元素位置肯定,跳出這次循環
目標任然是將待排元素插入到有序部分console
每次只是進行兩個元素的比較
其中一個是待排元素
這種方式可能不是直接插入排序function
function InsertSort(orderArray) { //輔助交換 var temp; //依次取出待排序部分的元素orderArray[i],從1開始 for (var i = 1; i < orderArray.length; i++) { temp = orderArray[i]; //待排部分和有序部分從右向左進行比較 for (var j = i - 1; j >= 0; j--) { //待排元素小於則交換位置 if (temp < orderArray[j]) { orderArray[j + 1] = orderArray[j]; orderArray[j] = temp; } else { break; } } } } var orderArray = [9, 3, 7, 1, 4, 2, 5, 0, 6, 8] InsertSort(orderArray); console.log(orderArray);