js实现常见排序算法

本文介绍了JavaScript中常见的五种排序算法:冒泡排序、插入排序、选择排序、归并排序和快速排序,包括它们的时间复杂度、空间复杂度及稳定性分析。
摘要由CSDN通过智能技术生成

1. 冒泡排序

时间复杂度:O(n) = n2
空间复杂度:O(n) = 1
稳定性:稳定

	function sort(arr) {
	    for (let i = 0; i < arr.length; i++) {
	         let flag = false;
	         for (let j = arr.length - 1; j >= i; j--) {
	             if (arr[j] > arr[j - 1]) {
	                 let temp = arr[j];
	                 arr[j] = arr[j - 1];
	                 arr[j - 1] = temp;
	                 flag = true;
	             }
	         }
	         if(!flag) break
	     }
	     return arr;
	 }

2. 插入排序

时间复杂度:O(n) = n2
空间复杂度:O(n) = 1
稳定性:稳定

	function sort(arr){
        for (let i = 1; i < arr.length; i++){
            let current = arr[i];
            let prevIndex = i - 1;
            while (prevIndex >= 0 && current < arr[prevIndex]) {
                arr[prevIndex + 1] = arr[prevIndex];
                prevIndex--;
            }
            arr[prevIndex + 1] = current;
        }
        return arr;
    }

3. 选择排序

时间复杂度:O(n) = n2
空间复杂度:O(n) = 1
稳定性:不稳定

	 function sort(){
         for (let i = 0; i < arr.length; i++) {
             let minIndex = i;
             for (let j = i + 1; j < arr.length; j++) {
                 if (arr[j] < arr[minIndex]) {
                     minIndex = j;
                 }
             }
             let temp = arr[i];
             arr[i] = arr[minIndex];
             arr[minIndex] = temp;
         }
         return arr;
     }

4. 归并排序

时间复杂度:O(n) = nlogn
空间复杂度:O(n) = n
稳定性:稳定

	function merge(left, right) {
        let result = [];
        while (left.length && right.length) {
            if (left[0] <= right[0]) {
                result.push(left.shift());
            } else {
                result.push(right.shift());
            }
        }
        while (left.length) result.push(left.shift());
        while (right.length) result.push(right.shift());
        return result;
    }

    function sort(arr) {
        if (arr.length < 2) return arr;
        let middle = Math.floor(arr.length / 2);
        let left = arr.slice(0, middle);
        let right = arr.slice(middle, arr.length);
        let sortLeft = sort(left);
        let sortRight = sort(right);
        return merge(sortLeft, sortRight)
    }

5. 快速排序

时间复杂度:O(n) = nlogn
空间复杂度:O(n) = n
稳定性:不稳定

	function sort(arr){
        if(arr.length < 2) return arr;
        let pivotIndex = Math.floor(arr.length / 2);
        let pivot = arr.splice(pivotIndex, 1)[0];
        let left = [];
        let right = [];
        for (let i = 0; i < arr.length; i++){
            if(arr[i] < pivot){
                left.push(arr[i]);
            }else {
                right.push(arr[i]);
            }
        }
        return sort(left).concat([pivot], sort(right));
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值