數據結構常用排序(冒泡,選擇,插入排序)

冒泡排序
  冒泡排序是由兩個for循環構成,第一個for循環的變量 j 表示總共需要多少輪比較,第二個for循環的變量 i 表示每輪參與比較的元素下標【0,1,…,length-i】, 因爲每輪比較都會出現一個最大值放在最右邊,所以每輪比較後的元素個數都會少一個,這也是爲什麼 j 的範圍是逐漸減小的。相信大家理解之後快速寫出一個冒泡排序並不難。

let aa = [4, 2, 8, 9, 5, 7, 6, 1, 3];

先聲明一個待排序的數組

function bubbleSort() {
    var m = 0;
    for (let j = 1; j < aa.length - 1; j++) {
        let flag = true;
        for (let i = 0; i < aa.length - 1; i++) {
            var bb = null;
            if (aa[i] > aa[i + 1]) {
                bb = aa[i];
                aa[i] = aa[i + 1];
                aa[i + 1] = bb;
                flag = false;
            }
            m++;
        }
        if (flag) {
            break;
        }
        // 第 i輪排序的結果爲
        console.log("第" + j + "輪排序後的結果爲:" + aa);

    }
    console.log('冒泡共運行' + m + '次');
}
bubbleSort();

在這裏插入圖片描述
選擇排序

  • 從待排序序列中,找到關鍵字最小的元素
  • 如果最小元素不是待排序序列的第一個元素,將其和第一個元素互換
  • 從餘下的 N - 1 個元素中,找出關鍵字最小的元素,重複(1)、(2)步,直到排序結束
// selectSort();
function selectSort() {
    var m = 0;
    for (var j = 0; j < aa.length - 1; j++) {
        var min = j;
        for (var i = j + 1; i < aa.length; i++) {
            //拿着本次運行到的最小值去跟剩餘的值做對比
            if (aa[i] < aa[min]) {
                min = i;
            }
            m++;
        }
        if (j != min) {
            var bb = aa[min];
            aa[min] = aa[j];
            aa[j] = bb;
        }
        console.log("第" + j + "輪排序後的結果爲:" + aa);
    }
    console.log('選擇排序共運行' + m + '次')
}

在這裏插入圖片描述插入排序

  • 每一步將一個待排序的記錄,插入到前面已經排好序的有序序列中去,直到插完所有元素爲止。(依次與前邊排好隊的參數比較 需要比較的current_i與 其前邊的數據一一對比 如果比其小 則插入)
function insertSort() {
    var m = 0;
    for (var j = 1; j < aa.length; j++) {
        var tmp = aa[j];
        var i = j;
        while (i > 0 && tmp < aa[i - 1]) {
            aa[i] = aa[i - 1];
            i--;
            m++;
        }
        aa[i] = tmp;
        console.log("第" + j + "輪排序後的結果爲:" + aa);
    }
    console.log(aa);
    console.log('插入排序共運行' + m + '次')
};
insertSort();

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章