0
点赞
收藏
分享

微信扫一扫

1.几种排序算法

船长_Kevin 2022-03-22 阅读 29
javascript

1.1冒泡排序

冒泡排序:就是逐层冒泡第一次执行的冒泡执行比较的次数为当前的长度-1

冒泡的总次数为长度-1,j和j+1比比较完进行位置交换

冒泡的比较次数一次比一次少最后到达一次结束//选择

var arr = [1,3,7,9,4,5,2]
    function fn(array){
    	for(var i=1;i<array.length;i++){//表示冒泡的次数
    		for(var j=0;j<array.length-i;j++){//表示冒泡的比较的次数
    			if(array[j]>array[j+1]){//进行比较 array[j]比array[j+1]大 就交换位置
    				var tem = array[j]
    				array[j] = array[j+1]
    				array[j+1] = tem
    			}
    		}
    	}
    }
    fn(arr)
    console.log(arr);//值为[1,2,3,4,5,7,9]

1.2 选择排序

选择排序:每次选择当前的第一个数为最小值

这个值跟后面的所有去比较  然后对应的比我这个值还小的把下标记录起来  将这个下标赋值给min

判断min是否是我前面给到的值  如果是那就不做操作  如果不是那就交换位置

var arr = [1,3,7,9,4,5,2]
	function fn2(array){
    	for(var i=1;i<array.length-1;i++){//length-1就是只剩一个数就不比了
    		//设置第一个数为最小值
        	var min = i
            for(var j=i+1;j<array.length;j++){
            	if(array[min]>array[j]){//如果比最小值还小
                	min = j //使用min记录一下比这个值
                }
			}    
			if(min!=i){
				//min不指向我们开始指定的下标位置
				//换位置
				var tem = array[i]
				array[i] = array[min]
				array[min] = tem
			}
		}
	}
	fn2(arr)
	console.log(arr);

1.3 插入排序

插入排序:从后外前比

var arr = [1,3,7,9,4,5,2]
    function fn3(array){
   		for(var i=1;i<array.length;i++){
    		var preIndex = i-1 //获取前一个下标
    		var current = array[i] //先保存当前的值 为防止
    		while(preIndex>=0 && current < array[preIndex]){
    		//如果前一个下标大于等于0和当前的值为小于上一个
    			array[preIndex+1] = array[preIndex] //将本身这个位置的值赋值为上一个
    			preIndex-- //递减 继续往前走
    		}
    		array[preIndex+1] = current //当前的位置的值等于原本位置的值
    	}
    }
    fn3(arr)
    console.log(arr);

1.4 快速排序

快速排序:无限二分 找中间值

var arr = [1,3,7,9,4,5,2]
        function fn4(arr) {
            if (arr.length <= 1) { //长度为1或者小于1退出
                 return arr
            }
            var centerIndex = Math.round(arr.length / 2) //取中间值下标
            var center = arr.splice(centerIndex, 1)[0] //接收删除的中间值
            var left = [] //左边的数组
            var right = [] //右边的数组
            for (var i = 0; i < arr.length; i++){ //循环遍历
                if (arr[i] < center) { //小于中间值 加到左边
                    left.push(arr[i])
                }else {
                    right.push(arr[i])//大于中间值 加到左边
                }
            }
            return fn4(left).concat([center], fn4(right));//返回合并的数组
        }
        console.log(fn4(arr));
举报

相关推荐

0 条评论