几个基本的前端排序方法

学习一下几个日常的算法排序问题

1. 冒泡排序

实现:用for循环遍历数组元素,拿出前一个和后一个元素对比,如果前边的值大于后边的值就交换位置,遍历元素进行排序。
图片应该看起来更清晰:

 

 

var arr = [89,12,8,14,23,45,9,15,33];
function bubble_sort(arr){
    var len = arr.length;
    if(arr.length ==1) {
        return
    }
    for(var i = 0; i < len; i++) {
        for(var j = 0; j < len-1; j++) {
          //如果前一个值比后一个值大,那么交换位置
         if(arr[j] > arr[j+1]) {
            var temp = arr[j];
            arr[j]  = arr[j+1];
            arr[j+1] = temp; 
          }
        }
    }
    return arr;
}
//测试一下代码
bubble_sort(arr);
//log [8, 9, 12, 14, 15, 23, 33, 45, 89]

2.快速排序

算法实现:
1.在数据集之中,选择一个元素作为”基准”(pivot)。
2.所有小于”基准”的元素,都移到”基准”的左边;所有大于”基准”的元素,都移到”基准”的右边。这个操作称为分区 (partition)操作,分区操作结束后,基准元素所处的位置就是最终排序后它的位置。
3.对”基准”左边和右边的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素为止。
图示:

 

function quickSort(arr){
    //如果数组<=1,则直接返回
    if(arr.length<=1){return arr;}
    var pivotIndex=Math.floor(arr.length/2);
    //找基准,并把基准从原数组删除
    var pivot=arr.splice(pivotIndex,1)[0];
    //定义左右数组
    var left=[];
    var right=[];

  //比基准小的放在left,比基准大的放在right
    for(var i=0;i<arr.length;i++){
        if(arr[i]<=pivot){
            left.push(arr[i]);
        } else{
            right.push(arr[i]);
            }
       }
  //递归
  return quickSort(left).concat([pivot],quickSort(right));
}

.选择排序

算法实现思路:
选择排序(Selection Sort)是一种简单直观的排序算法。它的工作原理如下,首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

 

 

function selectionSort(array) {
  var length = array.length,
      i,
      j,
      minIndex,
      minValue,
      temp;
  for (i = 0; i < length - 1; i++) {
    minIndex = i;
    minValue = array[minIndex];
    for (j = i + 1; j < length; j++) {
      if (array[j] < minValue) {
        minIndex = j;
        minValue = array[minIndex];
      }
    }
    // 交换位置
    temp = array[i];
    array[i] = minValue;
    array[minIndex] = temp;
  }
  return array
}

 

 

posted @ 2020-04-06 22:28  edczjw  阅读(1927)  评论(0编辑  收藏  举报