您的位置:首页 > Web前端 > JavaScript

各种排序算法的js实现

2013-11-19 12:59 253 查看
1. 冒泡排序

//冒泡排序(从小到大排列)
function bubbleSort(arr){
//一共比较length-1次
for(var i=1, len=arr.length; i<len; i++){
//从尾到头(当然也可以从头到尾)
for(var j=len-1; j>0; j--){
//大的排在后面
if(arr[j] < arr[j-1]){
var tmp = arr[j];

arr[j] = arr[j-1];
arr[j-1] = tmp;
}
}
}

return arr;
}

var arr = [6,5,4,3,2,1];
console.log(arr);
console.log( bubbleSort(arr) );


2. 鸡尾酒排序 (双向的冒泡排序)

//鸡尾酒排序排序(从小到大排列)
function cocktailSort(arr) {
//一共比较Math.ceil(length/2)次
for(var i = 0, len=arr.length; i < len/2; i++) {
//将最小值排在队头
for(var j = i; j < len-i-1; j++) {
//大换后
if(arr[j] > arr[j+1]) {
var temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
console.log( "大换后(index="+j+"):"+arr.join(',') );
}

//将最大值排到队尾
for(var j = len-i-1 ; j > i; j--) {
//小换前
if(arr[j] < arr[j-1]) {
var temp = arr[j];
arr[j] = arr[j-1];
arr[j-1] = temp;
}
console.log( "小换前(index="+j+"):"+arr.join(',') );
}
console.log("第"+(i+1)+"次排序结果:"+arr.join(','));
}

return arr;
}

var arr = [6,5,4,3,2,1];
console.log(arr);
cocktailSort(arr);


3. 快速排序

//快速排序
function quickSort(arr) {
  if (arr.length < 2) {
return arr;
}

  var firstItem = arr[0]; //取第一个数作为基准数
  var left = [];
  var right = [];

//从第2个数开始,通过与基准数比较后,分成大小两类
  for (var i = 1; i < arr.length; i++){
//小于基准数
    if (arr[i] < firstItem) {
      left.push(arr[i]);
    } else {
      right.push(arr[i]);
    }
  }

console.log(left.join(',')+" ("+firstItem+") "+right.join(','));

  return quickSort(left).concat([firstItem], quickSort(right));
}

var arr = [6,5,4,3,2,1,10,9,8,7];
console.log(quickSort(arr));
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: