(七)JavaScript实现堆排序

xiaoxiao2021-02-27  197

<!DOCTYPE html> <html> <head>   <meta charset="utf-8">   <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">   <title></title>    </head> <body>        <script>         function Heap(data){ this.arr=data; this.count=0; this.size=function(){ return this.count; }; this.isEmpty=function(){ return this.count==0; } this.insert=function(item){ this.arr[this.count]=item; this.shiftUp(this.count); this.count++; } this.extractMax=function(){ var temp=this.arr[0]; this.arr[0]=this.arr[count]; this.count--; this.shiftDown(0); return temp; } this.shiftDown=function(index){ while(index*2+1<=this.count){ var j=index*2+1; if(j+1<=this.count&&this.arr[j+1]>this.arr[j]){ j++; } if(this.arr[j]<this.arr[index]){  break; } var temp=this.arr[j]; this.arr[j]=this.arr[index]; this.arr[index]=temp; index=j; } /*if(index>count||index*2>count||(index*2+1)>count){ return; } var left=index*2; var right=index*2+1; if(arr[left]>arr[right]){ if(arr[left]>arr[index]){ var temp=arr[left]; arr[left]=arr[index]; arr[index]=temp; shiftDown[left]; } }else{ if(arr[right]>arr[index]){ var temp=arr[right]; arr[right]=arr[index]; arr[index]=temp; shiftDown[right]; } }*/ } this.shiftUp=function(index){ var parent=Number.parseInt((index-1)/2); if(parent<0){  return; } if(this.arr[index]>this.arr[parent]){ var temp=this.arr[parent]; this.arr[parent]=this.arr[index]; this.arr[index]=temp; this.shiftUp(parent); } } this.heapify=function(){ this.count=this.arr.length-1; var n=Number.parseInt((this.count-1)/2); for(var j=n;j>=0;j--){ this.shiftDown(j); } } //原地堆排序 this.heapsort=function(){ for(var i=this.arr.length-1;i>0;i--){ var temp=this.arr[0]; this.arr[0]=this.arr[i]; this.arr[i]=temp; this.count--; this.shiftDown(0); } } this.show=function(){ alert(this.arr); }   } var arrEX=[4,1,10,9,3,6,19,12,11,14,48,99,56,45]; var heap=new Heap(arrEX); heap.heapify(); heap.heapsort(); heap.show(); /*for(var i=0;i<arrEX.length; i++){ heap.insert(arrEX[i]); } heap.show();*/   </script>    </body> </html>
转载请注明原文地址: https://www.6miu.com/read-9878.html

最新回复(0)