常用的排序方法

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>js排序</title>
</head>
<body>
    
</body>
<script type="text/javascript">
    // 1.比较相邻的两个元素,如果前一个比后一个大(arr[j] > arr[j+1]),则交换位置。

    // 2.每轮比较结束的时候最后一个元素应该是最大的一个。

    // 3.外层的循环控制循环的次数(length -1),内层循环控制每次需要比较的个数(length -1 -i)
    let sort = (arr) => {
        if (!Array.isArray(arr)) {
            console.log('type error!')
            return
        }
        if(arr.length <= 1){
            return arr;
        }

        for(let i = 0; i < arr.length - 1; i++ ){
            for(let j = 0; j < arr.length - 1 - i; j++ ){
                if(arr[j] > arr[j+1]){
                    let temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }

        return arr;
    }

    // 1获取数组长度,以及中间索引及value

    // 2.与中间值进行比较,小的添加为l_arr数组,大的添加为r_arr数组,相等的添加为m_arr数组

    // 3.采用递归的方式进行不断的分割
    
    let quickSort = (arr) =>{
        if (!Array.isArray(arr)) {
            console.log('type error!')
            return
        }
        if(arr.length <= 1){
            return arr;
        }

        let m_index = Math.floor(arr.length/2);
        let m_val = arr[m_index];
        let l_arr = [];
        let r_arr = [];
        let m_arr = [];
        for(let i =0 ; i < arr.length; i++){
            if(arr[i] < m_val){
                l_arr.push(arr[i]);
            }else if(arr[i] > m_val[i]){
                r_arr.push(arr[i])
            }else {
                if(i !== m_index){
                    m_arr.push(arr[i])
                }
            }
        }

        return quickSort(l_arr).contact(m_arr,quickSort(r_arr));

    }
    let arr = [2,5,3,0,8,6];

    console.log(sort(arr))
    // [0, 2, 3, 5, 6, 8]
</script>
</html>

 

上一篇:快速排序


下一篇:快排