1、冒泡排序
实现思路:相邻两个数进行比较,大数下沉,小数向上浮。如果前一个数比后一个数大就交换
function fnSort( arr ){
var temp = null;
for ( var i = 0 ; i < arr.length - 1 ; i++){
for( var j = 0 ; j < arr.length - i -1 ; j++){//i每循环一次,j就少遍历一层
if( arr[j] > arr[j+1] ){//相邻数进行比较
//运用第三个变量,实现两个变量之间值的交换
temp = arr[ j ];
arr[ j ] = arr[ j +1 ];
arr[ j + 1 ] = temp;
}
}
}
return arr ;
}
2、选择排序
实现思路:每一趟比较时,依次取出数组中的某个值和后面的数进行比较,如果该数大于后面的数就交换
function fnSort( arr ){
//定义一个空变量,作为后面两个数交换的中间量
var temp = null ;
for ( var i = 0 ; i < arr.length - 1 ; i++){
for ( var j = i+1 ; j < arr.length ; j++){//取出arr[i],并与第i个元素后面所有的元素进行比较
if( arr[i] > arr[j] ){
temp = arr[ i ];
arr[ i ] = arr[ j ];
arr[ j ] = temp;
}
}
}
return arr;
}
3、sort排序
//sort 按照数值排序
var arr = [10,12,9,23,89];
arr.sort( function( a,b ){
return b-a; // a-b 升序 b-a降序 a-b>0 a>b
} )
alert( arr );
4、快速排序
实现思路:快速排序(quickSort)是基于冒泡排序的一种改进,该排序算法采用了分治的思想,将待排序数组逐步划分两个部分,其中左半部分都要小于右半部分,再将左右部分分别进行快速排序,整个过程可采用递归进行,直到排成一个有序数列。
function fnSort(arr){
if( arr.length <=1 ) return arr;
var midIndex = parseInt( arr.length / 2);记录中间值下标
var midVal = arr[ midIndex ]; //取出中间值
var left = [] //左半部分数组
var right = [ ] //有半部分数组
for( var i = 0 ; i < arr.length ; i++){
if( i == midIndex){//如果是中间值本身,直接跳过
continue;
}
if( arr[ i ] > midVal){//当该元素大于中间值时放到右侧
right.push( arr[i])
}else{//当该元素小于中间值时放到左侧
left.push( arr[i] )
}
}
//使用递归的思想,重复上述方法
return fnSort(left).concat(midVal).concat(fnSort(right));
}
5、插入排序
实现思路:1从第一个元素开始,该元素可以认为已经被排序2取出下一个元素,在已经排序的元素序列中从后向前扫描3如果该元素(已排序)小于新元素,将新元素插入该元素下一位置4 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置,将新元素插入到该位置后5若无,则将新元素插入最左侧6 重复步骤2~5
function fnSort(arr){
for ( var i = 0 ; i < arr.length ; i++){
//针对每一项都试图将它插入到前面有序的数组当中
var m = i ;
//前提: 1前面必须有内容
//前提: 2 当前这个元素,比左边小,交换一次
while( m - 1 >= 0 && arr[m] < arr[ m - 1] ){
var temp = arr[m];
arr[m] = arr[m-1];
arr[m-1] = temp;
m--;
}
}