文章目录
插入排序
直接插入排序(稳定)
思路
将数组第一个元素看作已经排序好的,按顺序遍历后面的元素,每遍历到一个,将它与已排序好的数组元素比较,插入到正确位置。
实现
function insertSort(arr){
for(let i=1;i<arr.length;i++){
//第一层循环:遍历待比较的数组元素
let temp=arr[i];
for(var j=i-1;j>=0 && arr[j]>temp;j--){
//第二层循环:将待比较的与已经排序的元素比较
arr[j+1]=arr[j];
}
//交换位置
arr[j+1]=temp;
}
return arr;
}
console.log(insertSort([2,7,1,9,5]))//[1,2,5,7,9]
希尔排序(不稳定)
思路
先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行依次直接插入排序。
实现
function shellSort(arr){
let n=arr.length,d=n;
while(d>1){
d=Math.floor(d/2);
for(var i=d;i<n;i++){
var temp=arr[i]
for(var j=i-d;j>=0 && arr[j]>temp;j=j-d){
arr[j+d]=arr[j];
}
arr[j+d]=temp;
}
}
return arr;
}
console.log(shellSort([7,59,1,9,5]))//[1,5,7,9,59]
选择排序
简单选择排序(不稳定)
思路
找出待排序元素最小(大)值,与第一个比较并交换位置,再在剩下的元素里找到最小(大)值与第二个元素比较并交换位置,直到最后数组有序。
实现
function directSelectSort(arr){
for(var i=0;i<arr.length;i++){
let minIndex=i,temp=arr[i];
for(var j=i+1;j<arr