排序算法

91 阅读1分钟

1.冒泡排序

省略

2.快排

/**

* 分治算法:先设置一个中轴元素,然后将序列中小于中轴元素的放置到序列左侧,大于的放置到右侧,然后再对两侧的序列分别进行递归快排

* @param {*} nums

*/
function quickSort(nums,left,right){
    if(left < right){
        let mid = partition(nums, left, right)
        //进行分割
        nums = quickSort(nums, left, mid - 1)
        nums = quickSort(nums, mid + 1, right)
    }
    return nums
}
function partition(nums,left,right){
    let pivot = nums[left]
    let i = left + 1
    let j = right
    while(true){
        while (i <= j && nums[i] <= pivot) i++;
        while (i <= j && nums[j] > pivot) j--
        if(i>=j) break
            [nums[i],nums[j]] = [nums[j],nums[i]]
    }
    nums[left] = nums[j]
    nums[j] = pivot
    return j
}
let sort = [21,12,34,67,25,46,52,19]
quickSort(sort,0,sort.length - 1)
console.log(sort)

3.插排

function insertSort(nums){
    if(!nums || nums.length < 2 ) return nums
    for(let i = 1; i < nums.length ; i ++ ){
        let j = i - 1
        while(j >= 0 && nums[j] >= temp) j --
        for(let k=i; k > j + 1; k--){
            nums[k] = nums[k-1]
        }
            nums[j+1] = temp;
    }
    return nums
}
let sort = [21,12,34,67,25,46,52,19]
insertSort(sort)
console.log(sort)

4.选择排序

function selectSort(nums){
    for(let i=0;i<nums.length -1;i++){
    let min = i
    for(let j = i + 1; j< nums.length ; j++){
        if(nums[min] > nums[j]) min = j
    }
        [nums[i],nums[min]] = [nums[min],nums[i]]
    }
    return nums
}
let sort = [21,12,34,67,25,46,52,19]
selectSort(sort)
console.log(sort)