选择排序
选择排序,顾名思义,始终选择第i个元素与数组其他未排序的元素进行比较,遇到比第i个元素小的,就进行交换,保持第i个元素是目前未排序的元素中最小的。
第一次循环,将最小的排到第一位,第二次循环,将第二小的排到第二位,以此类推
function selectSort(arr){
var len = arr.length;//存储数组长度,以免循环中多次调用
var minIndex;
for(var i=0; i<len; i++){
minIndex = i;//初始最小元素下标为i
for(var j=i+1; j<len; j++){
if(arr[j]<arr[minIndex]){
minIndex = j;//遇到更小元素,修改minIndex为其下标
}
}
[arr[i], arr[minIndex]] = [arr[minIndex], arr[i]];
//es6解构赋值,转换两个元素的值
}
return arr;
}
冒泡排序
冒泡排序,比较前后两个元素大小,符合条件即交换,每执行完一轮冒泡都可以将最大值排到最后
function bubbleSort(arr){
var len = arr.length;
for(var i=0; i<len; i++){
for(var j=0; j<len-i-1; j++){
if(arr[j]>arr[j+1]){
[arr[j], arr[j+1]] = [arr[j+1], arr[j]];
//es6解构赋值,转换两个元素的值
}
}
}
return arr;
}
插入排序
插入排序,始终将左侧看成一个已经排好的序列,循环之前保存需要插入的元素,与左侧序列逐一比较,符合条件,即可插入;不符合条件则将左侧序列往后移
function insertSort(arr){
//将左侧看成一个已经排序好的数组
var len = arr.length;
for(var i=1; i<len; i++){
var temp = arr[i];//保持需要插入的元素
for(var j=i-1; j>=0; j--){
if(arr[j]>temp){//不可插入,将元素向后移
arr[j+1] = arr[j];
}else{
break;//可插入,直接跳出,终止循环,j停留在可插入位置上
}
}
arr[j+1] = temp;//插入提取出来的元素,循环结束也会执行,即将元素插入到数组最前面
}
return arr;
}
网友评论