1.冒泡排序:两两比较(由小到大排序,每比较一次结果就把大的数挪到后边):
function bubbleSort ( data ) {
var temp = 0;
for ( var i = data.length ; i > 0 ; i -- ){
for( var j = 0 ; j < i - 1 ; j++){
if( data[j] > data[j + 1] ){
temp = data[j];
data[j] = data [j+1];
data[j+1] = temp;
}
}
}
return data;
}
数组为:[2,3,1,6,5],打印结果如下:
2.选择排序:遍历自身以后的元素,最小的元素跟自己调换位置。
function selectSort(arr) {
var len = arr.length;
for(let i=0;i<len-1;i++) {
for(let j=i;j<len;j++) {
if(arr[j]<arr[i]) {
[arr[i],arr[j]] = [arr[j],arr[i]]
}
}
}
return arr;
}
数组为:[5,3,1,6],打印结果如下:
3.插入排序:将元素插入已排序好的数组中
function insertSort(arr){
for(let i=1;i<arr.length;i++) {//外循环从1开始,默认arr[0]是有序段
for(let j=i;j>0;j++) {//j=i 将arr[i]依次插入到有序段中
if(arr[j]<arr[j-1]) {
[arr[j],arr[j-1]] = [arr[j-1],arr[j]]
} else{
break;
}
}
}
return arr;
}
数组为:[5,3,1,6],打印结果如下:
4.快速排序:
大致分三步:
1、找基准(一般是以中间项为基准)
2、遍历数组,小于基准的放在left,大于基准的放在right
3、递归
function quickSort(arr){
//如果数组<=1,则直接返回
if(arr.length<=1){return arr;}
var pivotIndex=Math.floor(arr.length/2);
//找基准,并把基准从原数组删除
var pivot=arr.splice(pivotIndex,1)[0];
//定义左右数组
var left=[];
var right=[];
//比基准小的放在left,比基准大的放在right
for(var 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));
}