(七)JavaScript实现堆排序

来源:互联网 发布:软件架构设计 autosar 编辑:程序博客网 时间:2024/06/04 23:32


<!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>
原创粉丝点击