js排序方法总结
一、冒泡排序
1.1 普通冒泡排序
function maopaoSort(arr){
for(var i=0,len=arr.length; i<len; i++){
for(var j=0; j<len-1-i; j++){ // 每一次循环结束都会找到最大的数放到数组最后,第一次是把整个数组最大的数放到最后
if(arr[j] > arr[j+1]){
var temp = arr[j+1];
arr[j+1]=arr[j];
arr[j]=temp;
}
}
}
return arr;
}
var arr=[9,23,0,1,345,-3,2,56,79,34,11];
console.log(maopaoSort(arr));
1.2 改进普通版,减少不必要步骤
function maopaoSort2(arr){
var i= arr.length-1;
while(i>0){
var pos = 0; // 每次循环记录最大数交换的位置
for(var j=0;j<i;j++){
if(arr[j] > arr[j+1]){
pos = j;
var temp = arr[j+1];
arr[j+1]=arr[j];
arr[j]=temp;
}
}
i = pos;
}
return arr;
}
var arr=[9,23,0,1,345,-3,2,56,79,34,11];
console.log(maopaoSort2(arr));
1.3 两头排序(左到右,找最大值,右到左,找最小值)
function maopaoSort3(arr){
var left = 0;
var right = arr.length-1;
var temp,j;
while(left<right){
for(j=left;j<right;j++){ // 左到右,找最大
if(arr[j] > arr[j+1]){
temp = arr[j+1];
arr[j+1]=arr[j];
arr[j]=temp;
}
}
right--;
for(j=right;j>left;j--){ // 右到左,找最小
if(arr[j] < arr[j-1]){
temp = arr[j-1];
arr[j-1]=arr[j];
arr[j]=temp;
}
}
left++;
}
return arr;
}
var arr=[9,23,0,1,345,-3,2,56,79,34,11];
console.log(maopaoSort3(arr));
二、选择排序(如排队一样,个子最矮的排最前面,然后从剩下找最矮的排第二位,以此往下)
function selectSort(arr){
var minIndex,temp;
for(var i=0,len=arr.length;i<len;i++){
minIndex = i;
for(var j=i+1;j<len;j++){
if(arr[minIndex]>arr[j]){
minIndex=j;
}
}
temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex]=temp;
}
return arr;
}
var arr=[9,23,0,1,345,-3,2,56,79,34,11];
console.log(selectSort(arr));