直接插入排序

英勇青銅

算法思路

兩個數組:待排序數組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);
相關文章
相關標籤/搜索