一、冒泡排序
原理:两两比较相邻的元素,如果反序,则交换位置,直到没有反序为止。 a、将序列中的相邻元素依次比较,较小的数向下冒(即交换到前面);第一轮比较结束后,序列第一个元素是当前序列的最小值。 b、对序列当中剩下的n-1个元素再次执行步骤a,直至完成。共需要n-1轮比较。
var arr = [ 1 , 9 , 4 , 2 , 5 , 3 , 8 , 6 , 7 ] ;
function bubbleSort ( array ) {
if ( Array. isArray ( array) ) {
if ( array. length == 1 ) {
return array;
}
var temp = null ;
for ( var i = 0 ; i< array. length; i++ ) {
for ( var j = 0 ; j< array. length- i- 1 ; j++ ) {
if ( array[ j] > array[ j+ 1 ] ) {
temp = array[ j] ;
array[ j] = array[ j+ 1 ] ;
array[ j+ 1 ] = temp;
}
}
}
return array;
}
}
console. log ( bubbleSort ( arr) ) ;
二、快速排序(递归排序)
原理:在数据集中,找一个基准点,建立两个数组,分别储存左边和右边的数组,利用递归进行下次比较。 即取中间值放到一边,把原数组一分为二,左边一个数组,右边一个数组,然后把两个数组中的值分别和中间的那个值进行比较,比它小的放在左边的数组中,比它大的放在右边的数组中,然后一直递归,直到数组不能分割。 递归必须有一个出口,所以最后要让他返回数组。
var arrinfo = [ 1 , 9 , 4 , 2 , 5 , 3 , 8 , 6 , 7 , 1 , 3 , 5 ] ;
function quickSort ( array ) {
if ( Array. isArray ( array) ) {
if ( array. length<= 1 ) {
return array;
}
var centerIndex = Math. ceil ( array. length/ 2 ) ;
var cValue = array. splice ( centerIndex, 1 ) ;
var left = [ ] ;
var right = [ ] ;
array. forEach ( function ( value ) {
if ( value< cValue) {
left. push ( value) ;
}
else {
right. push ( value) ;
}
} ) ;
return quickSort ( left) . concat ( cValue, quickSort ( right) ) ;
}
}
console. log ( quickSort ( arrinfo) ) ;
三、选择排序
原理:遍历数组,设置最小值的索引为0,如果取出的值比当前最小值小,就替换最小值索引,遍历完成后,将第一个元素和最小值索引上的值交换,如上操作后,第一个元素就是数组中的最小值,下次遍历就可以从索引1开始重复上述操作。
var arrinfo = [ 1 , 9 , 4 , 2 , 5 , 3 , 8 , 6 , 7 ] ;
function selectSort ( array ) {
if ( Array. isArray ( array) ) {
if ( array. length == 1 ) {
return array;
}
for ( var i = 0 ; i< array. length- 1 ; i++ ) {
var minIndex = i;
for ( var j = i+ 1 ; j< array. length; j++ )
{
minIndex = array[ minIndex] > array[ j] ? j: minIndex;
}
[ array[ i] , array[ minIndex] ] = [ array[ minIndex] , array[ i] ] ;
}
return array;
}
}
console. log ( selectSort ( arrinfo) ) ;
四、插入排序
原理:第一个元素默认是已排序元素,取出下一个元素和当前元素比较,如果当前元素大就交换位置,那么此时第一个元素就是当前的最小数,所以下次从第三个元素开始,向前比对,重复之前的操作。
var arrdata = [ 1 , 9 , 4 , 2 , 5 , 3 , 8 , 6 , 7 ] ;
function insertSort ( arr ) {
if ( Array. isArray ( arr) ) {
if ( arr. length == 1 ) {
return arr;
}
for ( var i = 1 ; i< arr. length; i++ )
{
var preIndex= i- 1 ;
var current = arr[ i] ;
while ( preIndex>= 0 && arr[ preIndex] > current)
{
arr[ preIndex+ 1 ] = arr[ preIndex] ;
preIndex-- ;
}
arr[ preIndex+ 1 ] = current;
}
return arr;
}
}
console. log ( insertSort ( arrdata) ) ;