直接插入排序:
外循环选定头几个元素为有序序列,内循环找到下一个元素的位置。
const sort1 = (arr) => {
for(let i = 1 ;i<arr.length;i++){
temp = arr[i]
for(let j = i-1;j>=0;j--){
if(arr[j]>arr[j+1]){
[arr[j+1],arr[j]] = [arr[j],arr[j+1]]
}
else break
}
}
}
冒泡排序:
内循环每次通过左右相邻元素比较,找出最大元素,最后置于队尾
外循环在下次循环中,排除队尾已有序的部分
const sort2 = (arr) => {
for(let i = 0;i<arr.length-1;i++){
for(let j = 1;j<arr.length-i;j++){
if(arr[j-1]>arr[j]){
[arr[j-1],arr[j]] = [arr[j],arr[j-1]]
}
}
}
}
选择排序:
内循环每次找出队列中最小值,置于队首
外循环排除队首有序部分
const sort3 = (arr) => {
for(let i = 0;i<arr.length;i++){
let min = i
for(let j = i+1;j<arr.length;j++){
if(arr[min]>arr[j]){
min = j
}
}
[arr[i],arr[min]] = [arr[min],arr[i]]
}
}
快速排序
选定队首为基准,将小于基准的值移至左边,将大于的移至右边,
即可找到基准的正确位置。
将队列按基准的位置分为两段(不包含基准),重复上面操作
const sort = (arr,begin=0,end=arr.length-1) => {
if(begin>end)return //递归跳出条件
temp = arr[begin] //设置头元素为基准
let i = begin
let j = end
while(i!=j){
while(temp>=arr[j]&&j>i)j--
while(temp<=arr[i]&&j>i)i++
[arr[i],arr[j]] = [arr[j],arr[i]]
}
[arr[i],arr[begin]] = [arr[begin],arr[i]]
sort(arr,begin,i-1)
sort(arr,i+1,end)
}
希尔排序:
function ShellSort( arr ) {
len=arr.length
for(gap=parseInt(len/2);gap>0;gap=parseInt(gap/2)){
for(i=gap;i<len;i++){
j=i
current=arr[j]
while(j-gap>=0&¤t<arr[j-gap]){
arr[j]=arr[j-gap]
j=j-gap
}
arr[j]=current
}
}
return arr
}