1 插入排序
function ary2Bst(ary){
return ary.reduce((root,it)=>{
return insert2BEST(root,it)
},null)
}
function insert2BEST(root,val){
if(!root){
return {
val:val,
left:null,
right:null,
}
}
if(val <= root.val){
root.left=insert2BEST(root.left,val)
}
if(val > root.val){
root.right=insert2BEST(root.right,val)
}
return root
}
res = []
midOrderTraverse(root,it=>{res.push(it)})
中序遍历
function midOrderTraverse(root,res=[]){
if(root){
midOrderTraverse(root.left,res)
res.push(root.val)
midOrderTraverse(root.right,res)
}
return res
}
2 冒泡排序
function buddleSort(ary){
var l=ary.length
var swaped
for(var i = 1;i<l;i++){
for(var j =0 ;j<l-i;j++){
if(ary[j]>ary[j+1]){
swaped=true
swap (ary,j,j+1)
}
}
if(!swaped){
break
}
}
return ary
}
P
3 选则排序
function selectSort(ary){
var l=ary.length;
var minPos
for(i=0;i<l-1;i++){
minPos=i
for(j=i+1;j<l;j++){
if(ary[j]<ary[minPos]){
minPos = j
}
}
swap(ary,i,minPos)
}
return ary
}
4 块排
function quickSort(ary,comparator=(a,b)=>a-b){
return Partition(ary,comparator)
}
function Partition(ary,comparator,start=0,end=ary.length-1,){
if(start>=end){
return
}
var pivotIndex=Math.floor(Math.random()*(end-start+1)+start)
var pivo = ary[pivotIndex]
swap(ary,pivotIndex,end)
for(i=start-1,j=start;j<end;j++){
if(comparator(ary[j],pivo)<0){
i++
swap(ary,i,j)
}
}
swap(ary,i+1,end)
Partition(ary,comparator,start,i)
Partition(ary,comparator,i+2,end)
return ary
}
function quickSort2(ary){
if(ary.length<2){
return ary.slice()
}
var post=ary[Math.floor(Math.random()*ary.length)]
var left=[]
var mid=[]
var right=[]
for(i=0;i<ary.length;i++){
var val =ary[i]
if(val<post){
left.push(val)
}
if(val==post){
mid.push(val)
}
if(val>post){
right.push(val)
}
}
return quickSort2(left).concat(mid,quickSort2(right))
}
5 归并排序
function mergeSort(ary){
if(ary.length<2){
return ary.slice()
}
var mid=Math.floor(ary.length/2)
var left=mergeSort(ary.slice(0,mid))
var right=mergeSort(ary.slice(mid))
var res=[]
while(left.length&&right.length){
if(left[0]<=right[0]){
res.push(left.shift())
}else{
res.push(right.shift())
}
}
res.push(...left,...right)
return res
}
```
### 6 堆排序(最麻烦最日狗)
```js
function heapSort(ary) {
heapify(ary)
for(var i = ary.length - 1; i>=1; i--) {
swap(ary, 0, i)
reheap(ary, 0, i - 1)
}
return ary
}
function heapify(ary) {
for(var i = ary.length - 1; i >= 0; i--) {
reheap(ary, i)
}
return ary
}
function reheap(ary, topIndex, endIndex = ary.length - 1) {
if (topIndex > endIndex) {
return
}
var largestIndex = topIndex
var leftIndex = topIndex * 2 + 1
var rightIndex = topIndex * 2 + 2
if (leftIndex <= endIndex && ary[leftIndex] > ary[largestIndex]) {
largestIndex = leftIndex
}
if (rightIndex <= endIndex && ary[rightIndex] > ary[largestIndex]) {
largestIndex = rightIndex
}
if (largestIndex != topIndex) {
swap(ary, largestIndex, topIndex)
reheap(ary, largestIndex, endIndex)
}
}