排序算法 javascript

一、冒泡排序

冒泡排序的基本思想是:每次比较两个相邻的元素,如果它们的顺序错误就把它们交换位置。

需要进行 n-1 趟比较,每一趟至少会有一个数归位。

例:[12,35,99,18,76]

    var nums = [12,35,99,18,76];
    for(let i=0;i<nums.length-1;i++){
        for(let j=0;j<nums.length-i;j++){
            if(nums[j]<nums[j+1]){
                let temp = nums[j];
                nums[j] = nums[j+1];
                nums[j+1] = temp;
            }
        }
    }    

输出:nums = [99,76,35,18,12]

需要注意的点:

  1. 最外层循环的次数
  2. 第二层循环 j 的取值范围

冒泡排序的时间复杂度是 O(n^2)

二、快速排序

首先在数组中随机找一个数作为 基准数 ,然后(先)从右开始找到第一个比基准数小的,从左开始找到第一个比基准数大的,交换!直到左右碰头,再分别处理基准数左右两边的数列。

例:[6,1,2,7,9,3,4,5,10,8]

    var nums = [6,1,2,7,9,3,4,5,10,8];
    function quickSort(left,right){
      let i=left;
      let j=right;
      let temp=nums[left];
      if(left>right){
        return;
      }
      while(i!=j){
        while(nums[j]>=temp&&i<j){
          j--;
        }
        while(nums[i]<=temp&&i<j){
          i++;
        }
        if(i<j){
          let t = nums[i];
          nums[i] = nums[j];
          nums[j] = t;
        }
      }
      //i==j
      nums[left] = nums[i];
      nums[i] = temp;
      quickSort(left,i-1);
      quickSort(j+1,right);
    }
    quickSort(0,nums.length-1);

输出:[1,2,3,4,5,6,7,8,9,10]

 

posted @ 2019-07-17 20:41  湛蓝的家  阅读(118)  评论(0编辑  收藏  举报