排序

作者: HE_Zoro | 来源:发表于2018-01-31 23:52 被阅读0次
  • 冒泡排序

比较两个相邻的数,不过不符合排序规则则交换这两个数的位置(比如升序,前一个比后一个大,则交换位置)。这样一轮下来,最大(或最小)的数就在最后了。在对数组剩下的数重复上述过程,直到排序完成。

function bubbleSort(arr){
    for(var i=0; i<arr.length; i++){
        for(var j=0; j<(arr.length-i); j++){
            if(arr[j] > arr[j+1]){
                swap(arr,j,j+1)
            }
        }
    }
    return arr
}

function swap(arr,left,right){
    var temp = arr[left];
    arr[left] = arr[right];
    arr[right] = temp;
}

var arr = [1,5,2,9,2,3,45,21,64,23,7,5]
bubbleSort(arr)
console.log(arr)
  • 选择排序

与冒泡排序类似,也是比较两个相邻的数,但不交换,只是对最小(或最大)的数进行标记,一轮比较完毕后再将最小(或最大)的数放在正确的位置。

function selectSort(arr){
    for(var i=0; i<arr.length; i++){
        var min = i;
        for(var j=i+1; j<arr.length; j++){
            if(arr[j]<arr[min]){
                min = j
            }
        }
        if(i!= min){
            swap(arr,i,min)
        }
    }
}

function swap(arr,left,right){
    var temp = arr[left];
    arr[left] = arr[right];
    arr[right] = temp;
}

var arr = [1,5,2,9,2,3,45,21,64,23,7,5]
selectSort(arr)
console.log(arr)
  • 插入排序

插入排序有点类似打牌时,我们一张一张的拿牌,按顺序放好,新拿的牌再插入到已经排好序的牌里。

function insertSort(arr){
    for(var i=0; i<arr.length; i++){
        var value = arr[i];
        for(j=i-1; j>-1&&arr[j]>value; j--){
            arr[j+1]=arr[j]
        }
        arr[j+1] = value//因为在执行j--后不满足条件才退出for循环,所以这时是arr[j+1]
    }
    return arr
}
var arr = [1,5,2,9,2,3,45,21,64,23,7,5]
insertSort(arr)
console.log(arr)
  • 合并排序

其基本思想是将两个已经排序好的数组合并,要比对所有的元素排序来的快。因此,可将数组依次拆开,再不断的两两合并,直至排序完成。

function mergeSort(arr){
    if(arr.length < 2){
        return arr
    }

    var middle = Math.floor(arr.length/2)
    var left = arr.slice(0,middle);
    var right = arr.slice(middle);

    return merge(mergeSort(left),mergeSort(right))
}

function merge(arrLeft,arrRight){
    var result = [];
    var i = 0, j = 0;
    while(i < arrLeft.length && j < arrRight.length){
        if(arrLeft[i] < arrRight[j]){
            result.push(arrLeft[i++])
        }else{
            result.push(arrRight[j++])
        }
    }
    return result.concat(arrLeft.slice(i)).concat(arrRight.slice(j))
}

var arr = [1,5,2,9,2,3,45,21,64,23,7,5]
mergeSort(arr)
console.log(mergeSort(arr))
  • 快速排序
    先确定一个支点,然后将小于支点的值放在支点左侧,将大于支点的值放于支点的右侧。对左右两侧不断重复该过程,直至排序完成。
function quickSort(arr,left,right){
    if(arr.length< 2){
        return arr
    }
    if(typeof left != 'number'){
        left = 0
    }
    if(typeof right != 'number'){
        right = arr.length-1
    }
    var index = partition(arr,left,right)
    if(left<index-1){
        quickSort(arr,left,index-1)
    }
    if(index<right){
        quickSort(arr,index,right)
    }
    return arr
}

function partition(arr,left,right){
    var middle = Math.floor((left+right)/2)
    var pivot = arr[middle]
    var i = left, j =right;
    while(i<=j){
        while(arr[i]<pivot){
            i++
        }
        while(arr[j]>pivot){
            j--
        }
        if(i<=j){
            swap(arr,i,j)
            i++
            j--
        }
    }
    return i
}

function swap(arr,left,right){
    var temp = arr[left];
    arr[left] = arr[right];
    arr[right] = temp;
}


var arr = [1,5,2,9,2,3,45,21,64,23,7,5]
quickSort(arr)
console.log(arr)

(先这样吧,困死,明天在把桶排和基数排序补上)

相关文章

  • 【恋上数据结构与算法二】(一)排序(Sorting)

    排序方法 冒泡排序 选择排序 堆排序 插入排序 归并排序 快速排序 希尔排序 计数排序 基数排序 桶排序 初识排序...

  • 排序-冒泡排序

    排序系列传递门 排序—选择排序排序—快速排序排序—插入排序排序-希尔排序(待完善)排序—归并排序(待完善)排序—基...

  • 排序

    冒泡排序: 冒泡排序 选择排序: 插入排序: 希尔排序: 归并排序: 快速排序: 堆排序: 计数排序: 桶排序: ...

  • Java | 10种排序算法

    冒泡排序 选择排序 插入排序 希尔排序 计数排序 基数排序 堆排序 归并排序 快速排序 桶排序

  • 常见的排序

    冒泡排序: 选择排序: 插入排序: 快速排序: 希尔排序: 归并排序: 堆排序: 计数排序: 桶排序: 基数排序:

  • 002--20200409刷题

    冒泡排序 选择排序 插入排序 希尔排序 归并排序 快速排序 堆排序 计数排序 桶排序 基数排序

  • 排序

    排序 符号:Θ 插入排序 选择排序 堆排序 归并排序 冒泡排序 快速排序 桶排序 基数排序 计数排序 插入排序 插...

  • 排序 -- 选择/插入

    聊聊排序吧 冒泡排序 选择排序 插入排序 快速排序 归并排序 计数排序 桶排序 堆排序 本篇 选择排序与插入排序 ...

  • 前端基础整理 | 算法基础

    排序算法 冒泡排序 选择排序 插入排序 希尔排序 归并排序 堆排序 快速排序

  • Java 常见的 8 种排序算法(内排序)

    排序分类 内部排序 插入排序:直接插入排序、希尔排序 交换排序:冒泡排序、快速排序 选择排序:直接选择排序、堆排序...

网友评论

      本文标题:排序

      本文链接:https://www.haomeiwen.com/subject/skolzxtx.html