js十种排序

2,272 阅读3分钟

JS中的冒泡排序和选择排序

一、冒泡排序

  • 基本思想:通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序,则交换,使值较大的元素逐渐从前移向后部,就像水底的气泡一下逐渐向上冒。

图片演示

代码

function bubbleSort(arr) {
var len = arr.length;
for (var i = 0; i < len; i++) {
    for (var j = 0; j < len - 1 - i; j++) {
        if (arr[j] > arr[j+1]) {        //相邻元素两两对比
            var temp = arr[j+1];        //元素交换
            arr[j+1] = arr[j];
            arr[j] = temp;
        }
    }
}
return arr;
}

二、选择排序

  • 拿出用数组第一项与数组的第二次开始一次比较,将最小的那一项的索引值[min]保存,然后再将数组的第一项索引为[0]与这个最小值兑换位置。(第一次循环找出数组中最小的放在第一位)
  • 让后再拿出数组第二项,与数组的第三项开始找出数组中第二小的值的索引[min],然后与数组中第二项索引为[1]的互换位置。

图片演示

代码

function selectionSort(arr) {
var len = arr.length;
var minIndex, temp;
for (var i = 0; i < len - 1; i++) {
    minIndex = i;
    for (var j = i + 1; j < len; j++) {
        if (arr[j] < arr[minIndex]) {     //寻找最小的数
            minIndex = j;                 //将最小数的索引保存
        }
    }
    temp = arr[i];
    arr[i] = arr[minIndex];
    arr[minIndex] = temp;
}
return arr;
}

三、插入排序

  • 基本思想:
    • 插入排序的代码实现虽然没有冒泡排序和选择排序那么简单粗暴,但它的原理应该是最容易理解的了,因为只要打过扑克牌的人都应该能够秒懂。当然,如果你说你打扑克牌摸牌的时候从来不按牌的大小整理牌,那估计这辈子你对插入排序的算法都不会产生任何兴趣了。。。
  • 插入排序和冒泡排序一样,也有一种优化算法,叫做拆半插入。对于这种算法,得了懒癌的我就套用教科书上的一句经典的话吧:感兴趣的同学可以在课后自行研究。。。

图片演示

代码

    function A(arr){
    var preIndex,current; //定义两个值用来实现位置互换的方法
    var len = arr.length;//定义len为长度length,方便后面书写
    for(var i=1;i<len;i++){//利用for循环来实现对每一个数之间的比较
        preIndex=i-1;//i-1代表i前面的数,preIndex代表i前面的数
        current=arr[i];//current代表i这个位置的数
        while(preIndex >= 0 && arr[preIndex]>current){//利用while判断语句比较两个数之间的大小关系,当preIndex >= 0且arr[preIndex]>current 执行while函数内部代码
        arr[preIndex+1] = arr[preIndex];//preIndex+1将数值赋值与arr[preIndex]
        preIndex--;//arr[preIndex]向前移动一个位置
    }
    arr[preIndex + 1]=current;//将preIndex +1 的数值赋予current;
    }//完成排序
    return arr;//返回函数值
}
var sel = [1,2,5,3,6,2,4,5,8,6]//声明一个实验变量,用于实验函数的可行性
console.log(A(sel));//调用函数