一、冒泡排序
- 原理:两两比较相邻的元素,如果反序,则交换位置,直到没有反序为止。
- 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));