数据与算法之美 2020-03-08
var arr=[8,4,5,7,1,3,6,2] function insertionSort(arr){ for(var i=1;i<arr.length;i++){ var tmp=arr[i] for(var j=i-1;j>=0;j--){ if(tmp>=arr[j]){break} arr[j+1]=arr[j] } j==-1?arr[0]=tmp:arr[j+1]=tmp } } insertionSort(arr) console.log(arr)
var arr=[8,4,5,7,1,3,6,2] function swap(a,i,j){ var tmp=a[i] a[i]=a[j] a[j]=tmp } function selectSort(arr){ for(var i=0;i<arr.length-1;i++){ var min=arr[i] var minindex=i for(var j=i;j<arr.length;j++){ if(arr[j]<min){ min=arr[j] minindex=[j] } } // 找到最小元素后,与当前元素交换 swap(arr,i,minindex) } } selectSort(arr) console.log(arr)
var arr=[8,4,5,7,1,3,6,2] function swap(a,i,j){ var tmp=a[i] a[i]=a[j] a[j]=tmp } function bubbleSort(arr){ for(var i=0;i<arr.length-1;i++){ for(var j=0;j<arr.length;j++){ if(arr[j]>arr[j+1]){ swap(arr,j,j+1) //逆序交换 } } } } bubbleSort(arr) console.log(arr)
var arr=[8,4,5,7,1,3,6,2] function merge(arr,l,m,r){ var newx=new Array(arr.length) var i var j // 升序排列 for(i=m+1;i>l;i--){newx[i-1]=arr[i-1]} // 降序排列 for(j=m;j<r;j++){newx[r+m-j]=arr[j+1]} console.log(newx,i,j) for(var k=l;k<=r;k++){ if(newx[j]<newx[i]){ arr[k]=newx[j--] }else{ arr[k]=newx[i++] } } } function mergeSort(arr,l,r){ if(l>=r){return} var m=Math.floor((l+r)/2) mergeSort(arr,l,m) mergeSort(arr,m+1,r) merge(arr,l,m,r) } mergeSort(arr,0,arr.length-1)