数据结构常用排序(冒泡,选择,插入排序)

冒泡排序
  冒泡排序是由两个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();

在这里插入图片描述

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