冒泡排序:
var arr = [ 9,8,11,6,5,2,1]
分析:
第一轮:
8 9 11 6 5 2 1
8 9 11 6 5 2 1
8 9 6 11 5 2 1
8 9 6 5 11 2 1
8 9 6 5 2 11 1
8 9 6 5 2 1 11
第二轮
8 9 6 5 2 1
8 6 9 5 2 1
8 6 5 9 2 1
8 6 5 2 9 1
8 6 5 2 1 9
第三轮
8 6 5 2 1
6 8 5 2 1
6 5 8 2 1
6 5 2 8 1
6 5 2 1 8
第四轮
6 5 2 1
5 6 2 1
5 2 6 1
5 2 1 6
第五轮
5 2 1
2 5 1
2 1 5
第六轮
2 1
1 2
// function bubbleSort(arr){ // //确定循环的次数 // for(var i = 0 ; i < arr.length - 1 ; i++){ // //每一轮 数值比较 // for(var k = 0 ; k < arr.length - i - 1; k++){ // //谁大谁往后排 // if(arr[k] > arr[k + 1]){ // var temp = arr[k]; // arr[k] = arr[k + 1]; // arr[k + 1] = temp; // } // } // } // return arr; // } // console.log(bubbleSort(arr));
选择排序:(类似打擂台)
var arr = [6,5,1,3,2];
6,5,1,3,2
第一轮
5 6 1 3 2
1 6 5 3 2
1 6 5 3 2
1 6 5 3 2
第二轮
6 5 3 2
5 6 3 2
3 6 5 2
2 6 5 3
第三轮
6 5 3
5 6 3
3 6 5
第四轮
6 5
5 6
var arr = [6,5,1,3,2]; function chooseSort(arr){ //确定几轮 for(var i = 0 ; i < arr.length - 1 ; i++){ //每一轮都和第一个比较 for(var k = i + 1 ; k < arr.length ; k++){ //谁小放前面 if(arr[i] > arr[k]){ var temp = arr[i]; arr[i] = arr[k]; arr[k] = temp; } } } return arr; } console.log(chooseSort(arr));
快速循环:
function quickSort ( arr ){ // 递归结束条件 if(arr.length <= 1){ return arr; } var midIndex = parseInt(arr.length / 2), //取中间值索引 midValue = arr[midIndex], leftArr = [], rightArr = []; //遍历arr数组。每一个值和中间的值相比较,大的放右侧数组。小的等的放左侧。 for(var i = 0; i < arr.length; i++){ // 如果是中间小标,跳出本次循环,(中间值不用和自身比较) if(i == midIndex){ continue; } if(arr[i] <= midValue){ leftArr.push(arr[i]); }else{ rightArr.push(arr[i]); } } // 调用递归函数处理左右数组 var res = quickSort(leftArr).concat(midValue).concat(quickSort(rightArr)); return res; } console.log(quickSort(arr));