针对排序算法总结整理如下:
1.冒泡排序
1)一列数组,从元素第一个位置 0 开始比较相邻 i+1位置的元素,如果大于它,那么交换位置,起始位置i++,继续比较到i+1的元素。重复进行直到 i+1 == 数组长度 时结束循环。现在最后一个元素为最大值。(内层循环 目标:找到最大)
2)len-1,刨去最后一个元素即当前最大元素,继续从i = 0 开始 重复执行(1)步 直到 len = 0时 结束循环(外层循环 目标:重复找到第二个、第三个...最大元素)
function bubbleSort(arr) {
var len = arr.length, i = 0,temp;
while(--len) {
while (i < len) {
if(arr[i] > arr[i+1]) {
temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
i++;
}
i = 0;
}
return arr;
}
2.选择排序
1)从第0个元素开始初始假设第一个最小元素索引为0, 从i+1个元素开始循环到len直到找到更小的数则交换索引,否则保持不变, (内层循环 目标:找到最小的数的索引)
2)如果初始设定的索引不是最小数那么交换元素
3)从i+1开始直到 <len-1 重复进行(1)、(2)
function selectSort(arr) {
var len = arr.length,min, temp;
for ( var i = 0; i < len - 1; i++ ) {
min= i;
for ( var j = i + 1; j < len; j++ ) {
if ( arr[j] < arr[min] ) { //找到更小的数
min= j; //保存当前最小的索引
}
}
if( i != min ){//如果不是当前最小则交换
temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
}
return arr;
}
3.插入排序
1)假定第0个元素为排序好的有序队列,从第1个元素开始,向当前有序队列从后向前一一比较,直到有一个元素大于它则将该元素前移
function insertSort(arr){
var len = arr.length;
for (var i = 1; i < len; i++) {
var temp= arr[i];
var j = i - 1;
while (j >= 0 && arr[j] > temp) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = temp;
}
return arr;
}