数据结构与算法JavaScript描述读书笔记(基本排序算法)

前提准备

//自动生成数组的函数,n:整数个数,数字在l-r之间
function setData(n,l,r){
    var dataStore = [];
    for(var i=0;i<n;i++){
        dataStore[i] = Math.floor(Math.random()*(r-l+1)+l);
    }
    return dataStore;
}

冒泡排序

最慢的 排序算法之一,但最容易实现

过程:依次比较相邻的两个数值,一趟之后将最大(小)的冒到最后

时间复杂度:O(n^2)

稳定性:稳定

function bubbleSort(arr){
    var temp;
    for(var i=0;i<arr.length;i++){
        //注意这里是arr.length-i,每经过一趟,最大的就会沉到最后,之后就不需要对其进行比较了
        for(var j=1;j<arr.length-i;j++){
            if(arr[j] < arr[j-1]){
                temp = arr[j];
                arr[j] = arr[j-1];
                arr[j-1] = temp;
            }
        }
    }
    return arr;
}

选择排序

过程:每次将第一个元素与其它元素相比,第一趟之后会把最小的放在开头,之后再依次与第二个元素相比,依次进行,当进行到数组的倒数第二个位置时结束

特点:每次内循环都将最小的值赋值到它正确的位置

时间复杂度:

稳定性:

function selectionSort(arr){
    var temp;
    //外层循环到倒数第二个结束
    for(var i=0;i<arr.length-1;i++){
        //内存循环从第二个开始
        for(var j=i+1;j<arr.length;j++){
            if(arr[j] < arr[i]){
                temp = arr[j];
                arr[j] = arr[i];
                arr[i] = temp;
            }
        }
    }
    return arr;
}

插入排序

在一个有序的数组中,将一个数字插入到它合适的位置

过程:外层循环从第二个位置开始,并将其值赋值给temp,内存循环从外层循环的前一个位置开始,一直到第一个位置,
           如果外层循环的值比temp大,则数组向右移动,将此时的外层循环的位置插入temp

注意:插入排序的运行并非通过数据交换,而是通过将较大的数组元素移动到右侧,为数组左侧的较小元素腾出位置

时间复杂度:

稳定性:

function insertSort(arr){
    for(var i=1;i<arr.length;i++){
        //每次将外层循环赋值给temp
        var temp = arr[i];
        for(var j=i-1;j>=0;j--){
            if(arr[j] > temp){
                arr[j+1] = arr[j];
                arr[j] = temp;
            }
        }
    }
    return arr;
}

时间复杂度可稳定性最后再总结

猜你喜欢

转载自blog.csdn.net/qq_37200686/article/details/83068265