快速排序和冒泡排序的区别?

首先要明白什么是复杂程度?

  时间复杂度指的是一个算法执行所耗费的时间

  空间复杂度指运行完一个程序所需内存的大小

  稳定指,如果a=b,a在b的前面,排序后a仍然在b的前面

  不稳定指,如果a=b,a在b的前面,排序后可能会交换位置

1.快速排序(不稳定) 

  原理:首先从原始数组中找到最小的元素,并把该元素放在数组的最前面,然后再从剩下的元素中寻找最小的元素,放在之前最小元素的后面,知道排序完毕

  时间复杂度:

        最好情况是(n)

        最差情况是(n*n)

  function quickSort(arr){

    if (arr.length <= 1) return arr;

      var pivotIndex = Math.floor(arr.length/2);
      var pivot = arr.splice(pivotIndex,1)[0];
      var left = [];
      var right = [];
      for (let 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))
    }

  }
  quickSort(arr)

2.冒泡排序 (稳定)

  原理:依次比较相邻的两个值,如果后面的比前面的小,则将小的元素排到前面。依照这个规则进行多次并且递减的迭代,直到顺序正确。(从大到小/从小到大是根据自己判断的)

 

  时间复杂度:

 

        最好情况是(n*n)

 

        最差情况是(n*n)

 

  function sort(arr){

    var temp = null;
    for (var i = 0;i < arr.length-1; i++){
      for (var j = i + 1; j < arr.length; j++) {
        if (arr[i] > arr[j]) {
          temp = arr[j];
          arr[j] = arr[i];
          arr[i] = temp;
         }
      }
    }
  }
  sort(arr)

  

上一篇:Java编写的快速排序算法


下一篇:Java快速排序