实现高效率的冒泡排序

二次信任 提交于 2019-12-05 04:05:51
// 自己实现冒泡排序最简单的方式就是使用双层循环
var arr = [10,2,5,7,8,10,10,20,10,18,20,89,6,7,52]
// 外层循环是我们需要将每一个数列都排序一次,那么需要排序的数列就是arr.length - 1次
for(var i = 0; i < arr.length - 1 ; i++){
    for(var j = 0; j < arr.length - 1 -i; j++){
        if(arr[j] > arr[j+1]){
            var temp = arr[j];
            arr[j] = arr[j+1];
            arr[j+1] = temp
        }
    }
}
console.log(arr)
// 上面效率是相对较低的,可以参考二分查找以及递归的思路我们实现效率高的排序方法
function quickSort(start,end){
    if(start >= end){
        return
    }
    // 二分查找的标志
    var pivot = arr[start];
    var left = start;
    var right = end;
    // 循环查找当左右不重合时我们交换left和right的位置
    while(left != right){
        // 循环如果right比标志小那么停止并记录当前位置
        while(right > left && arr[right] >= pivot){
            right--
        }
        //循环如果left比标志大那么停止并记录当前位置
        while(left < right && arr[left] <= pivot){
            left++
        }
        // 交换两者位置
        if(left < right){
        var temp = arr[left]
        arr[left] = arr[right]
        arr[right] = temp
        }

    }
    // 如果right = left 那么我们将pivot放于中间位置
        arr[start] = arr[left];
        arr[left] = pivot;
        quickSort(start , left - 1);
        quickSort(right + 1,end);

}

quickSort(0,arr.length - 1)
console.log(arr)

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!