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;
}