1、插入排序
(1)简单插入排序
//插入排序
function insertSort(arr){
let current,preIndex
for(let i=1;i<arr.length;i++){
preIndex=i-1
current=arr[i]
while(preIndex>=0&&arr[preIndex]>current){
arr[preIndex+1]=arr[preIndex]
preIndex--
}
arr[preIndex+1]=current
}
}
(2)希尔排序
//希尔排序
function shellSort(arr){
let half= Math.floor(arr.length/2) //向下取整
for(let gap=half;gap>=1;gap=Math.floor(gap/2)){
//外层为增量的取值
for(let i=gap; i<arr.length;i++){
//此层遍历增量后面的所有数字
for(let j=i-gap; j>=0 ;j=j-gap){
//此层遍历增量区间的所有数字
if(arr[j]>arr[j+gap]){
//增量两端的数字进行比较,左边大则进行交换位置
let temp=arr[j]
arr[j]=arr[j+gap]
arr[j+gap]=temp
}
}
}
}
}
2、交换排序
(1)冒泡排序
//冒泡排序
function bubbleSort(arr){
for(let i=0;i<arr.length;i++){
for(let j=i+1;j<arr.length;j++){
if(arr[i]>arr[j]){
let temp=arr[i]
arr[i]=arr[j]
arr[j]=temp
}
}
}
}
(2)快速排序
//快速排序
function quickSort(arr){
if(arr.length<2)
return arr
//确定第一个元素为枢轴
let pivot=arr[0]
//找到所有比第一个元素还小的数据
let left= arr.slice(1).filter(item=>item<=pivot)
//找到所有比 第一个元素还大的数据
let right= arr.slice(1).filter(item=>item>pivot)
//左边、枢轴、右边进行一个拼接
return quickSort(left).concat([pivot]).concat(quickSort(right))
}
3、选择排序
(1)简单选择排序
//选择排序
function selectSort(arr){
let min,temp;
for(let i=0;i<arr.length-1;i++){
min=i
//比较元素
for(let j=i+1;j<arr.length;j++){
if(arr[j]<arr[min]){
min=j
}
}
//交换元素
temp=arr[i]
arr[i]=arr[min]
arr[min]=temp
}
}