Js 排序算法---选择排序

3、选择排序

每一趟从待排序的记录中选择关键字最小的记录,并顺序放在已排序号的记录最后,直到全部记录排序位置。

(1)直接选择排序(简单排序)

从所有记录中选出最小的一个数据元素与第一个位置的记录交换;然后在剩下的记录当中再找最小的与第二个位置的记录交换,循环到只剩下最后一个数据元素为止。

时间复杂度:O(n2)

不稳定排序方法。

 //选择排序
 //直接选择排序--简单排序
 function SelectSort(record){
	 var i,j,k,temp;
	 for(i=0;i<record.length;i++){
		 k=i;
		 for(j=i+1;j<record.length;j++){
			 if(record[j]<record[k]){
				 k=j;
			 }
		 }
		 if(k!=i){
			 temp=record[i];
			 record[i]=record[k];
			 record[k]=temp;
		 }
	 }
	 console.log(record);
	 return record;
 }

(2)堆排序




最坏情况:O(nlogn)

堆排序不适合记录数较少的情况,对大量记录的排序来说,堆排序是非常有效的。

升序:大顶堆;降序:小顶堆;

不稳定排序

 //堆排序--升序用大堆
 function HeapAjust(record,s,t){
	 var temp=record[s];
	 var i=s;
	 for(var j=2*i+1;j<=t;j=2*j+1){
		 if(j<t&&record[j]<record[j+1]){
			 j=j+1;
		}
		if(temp>record[j]) {
			 break;
			 }
		 record[i]=record[j];
		 i=j;
	 }
	 record[i]=temp;
 }
 function HeapSort(record){
	 var n=record.length;
	 for(var i=Math.floor((n-1)/2);i>=0;i--){
		 HeapAjust(record,i,n-1);
	 }
	 for(i=n-1;i>=0;i--){
		 var temp=record[i];
		 record[i]=record[0];
		 record[0]=temp;
		 HeapAjust(record,0,i-1);
	 }
	 console.log(record);
	 return record;
 }


猜你喜欢

转载自blog.csdn.net/meimeilive/article/details/81035230