快速排序

核心思想:在当前参加排序的序列中任意选择一个元素,把小于等于分界元素的所有元素都移到分界元素的前边,把大于等于分界元素的所有元素都移到分界元素的后边,这样,分界元素正好处在排序的最终位置上,并且把当前参加排序的序列划分成前后两个子序列。然后,分别对这两个子序列递归地进行上述过程,直到使得所有元素都到达整个排序后它们应处的位置上。

var arr1 = [38,49,65,97,76,13,27,49];

function swap(arr,x,y) {
  var temp ;
  temp = arr[x];
  arr[x] = arr[y];
  arr[y] = temp;
}
var quick= function(arr,s,t){
  var i, j,temp;
  if(s<t){
    i=s;
    j=t+1;
    while(1){
      do {
        i++;
      }while(!(arr[s]<=arr[i]||i==t));
      do {
        j--;
      }while(!(arr[s]>=arr[j]||j==s));
      if(i<j){
        swap(arr,i,j);
      }else{
        break;
      }
    }
    swap(arr,s,j);
    quick(arr,s,j-1);
    quick(arr,j+1,t);
  }
}
var quickSort = function(arr){
  var n = arr.length;
  quick(arr,0,n-1);
}

quickSort(arr1);
console.log(arr1);

 算法分析:快速排序的时间复杂度是O(n2),不稳定排序

原文地址:https://www.cnblogs.com/jymz/p/4180438.html