用typescript实现排序-递增

var arr= [1,3,5,9,2,7,4,6,8]
arr.sort()  --默认是从小到大排序

// 冒泡排序 bubbleSort
function sortFun(arr:Array<number>):Array<number>{
	for(let i=0;i<arr.length;i++){
		for(let j=0;j<arr.length - i;j++){
			let temp
			if (arr[j] < arr[j+1]){
				temp = arr[j]
				arr[j] = arr[j+1]
				arr[j+1] = temp
			}
		}
	}
	return arr
}

// 快速排序,quickSort
function quickSort(arr: Array<number>): Array<number> {
    let final: Array<number> = new Array(...arr);

    function tureQuickSort(arr: Array<number>, left: number, right: number): Array<number> {
        if (left >= right) {
            return;
        }
        let i: number = left, j: number = right;
        let mark: number = arr[i];
        // 用mark作为中间值,将数组左右对半分
        while (i < j) {
            // 寻找右边比mark更小的
            while (i < j && arr[j] >= mark) {
                j--;
            }
            arr[i] = arr[j];
            // 寻找左边比mark更大的
            while (i < j && arr[i] <= mark) {
                i++;
            }
            arr[j] = arr[i];
        }
        arr[i] = mark;

        // 递归分左右两个子数组
        tureQuickSort(arr, left, i - 1);
        tureQuickSort(arr, i + 1, right);
    }

    tureQuickSort(final, 0, final.length - 1);

    return final;
}

快速排序:和上面方法一样,但更简洁
function  quickSort(array) {
    const sort = (arr, left = 0, right = arr.length - 1) => {
    if (left >= right) {//如果左边的索引大于等于右边的索引说明整理完毕
        return
    }

    let low = left
    let index = right
    const baseVal = arr[right] // 取无序数组最后一个数为基准值

    while (low < index) {//把所有比基准值小的数放在左边大的数放在右边

    //找到一个比基准值大的数交换
    while (low < index && arr[low] <= baseVal) { 
        low++
    }
    arr[index] = arr[low] // 将较大的值放在右边如果没有比基准值大的数就是将自己赋值给自己(i 等于 j)

    while (low < index && arr[index] >= baseVal) { //找到一个比基准值小的数交换
        index--
        break
    }
    arr[low] = arr[index] // 将较小的值放在左边如果没有找到比基准值小的数就是将自己赋值给自己(i 等于 j)
    }

    arr[index] = baseVal // 将基准值放至中央位置完成一次循环(这时候 j 等于 i )

    sort(arr, left, index-1) // 将左边的无序数组重复上面的操作
    sort(arr, index+1, right) // 将右边的无序数组重复上面的操作
    }
    sort(array)
    return array
}

插入排序是维护一个长度为i的有序序列,每次i自增1,为下标为i的数向前找插入位置。
// 插入排序 insertSort
function insertSort(arr: Array<number>): Array<number> {
    let final: Array<number> = new Array(...arr);

    for (let i = 1; i < final.length; i++) {
        let mark: number = final[i];
        let j: number;
        // 寻找插入位置
        for (j = i - 1; j >= 0; j--) {
            if (final[j] < mark) {
                // 插入位置找到
                break;
            } else {
                final[j + 1] = final[j];
            }
        }
        // 进行插入操作
        final[j + 1] = mark;
    }

    return final;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值