排序算法常见的有八种,分别为冒泡,选择,插入,希尔,归并,快排,堆排序,基数排,这里我只总结六大常见排序并用js来进行实现。至于每种排序算法的原理细节,读者可以参考其他人专门的博客进行学习,还有堆排序和基数排序读者也可以自行学习。
1.冒泡排序
function bubleSort(arr){
for(var i=arr.length-1;i>=0;i--){
for(var j=0;j<i;j++){
if(arr[j]>arr[j+1]){
temp=arr[j]
arr[j]=arr[j+1]
arr[j+1]=temp
}
}
}
return arr
}
2.选择排序
function selectSort(arr){
for(var i=0;i<arr.length;i++){
for(var j=i+1;j<arr.length;j++){
if(arr[j]<arr[i]){
temp=arr[i]
arr[i]=arr[j]
arr[j]=temp
}
}
}
return arr
}
3.插入排序
function insertSort(arr){
for(var i=1;i<arr.length;i++){
var temp=arr[i]
var j=i
while(j>0&&arr[j-1]>temp){
arr[j]=arr[j-1]
j--
}
arr[j]=temp
}
return arr
}
4.希尔排序
function shellSort(arr){
var gap=Math.floor(arr.length/2)
while(gap>0){
for(var i=gap;i<arr.length;i++){
var temp=arr[i]
var j=i
while(arr[j-gap]>temp&&j>gap-1){
arr[j]=arr[j-gap]
j-=gap
}
arr[j]=temp
}
gap=Math.floor(gap/2)
}
return arr
}
5.快速排序
function quickSort(arr){
if(arr.length<=1){
return arr
}
var povitIndex=Math.floor(arr.length/2)
var povitIndexValue=arr.splice(povitIndex,1)
var left=[]
var right=[]
for(var i=0;i<arr.length;i++){
if(arr[i]<povitIndexValue){
left.push(arr[i])
}else{
right.push(arr[i])
}
}
return quickSort(left).concat(povitIndexValue,quickSort(right))
}
6.归并排序
function merge(left,right){
var res=[]
while(left.length>0&&right.length>0){
if(left[0]<right[0]){
res.push(left.shift())
}else{
res.push(right.shift())
}
}
return res.concat(left).concat(right)
}
function mergeSort(arr){
if(arr.length==1){
return arr
}
var index=Math.floor(arr.length/2)
var left_arr=arr.slice(0,index)
var right_arr=arr.slice(index)
return merge(mergeSort(left_arr),mergeSort(right_arr))
}