今天总结了几个比较基础常用的排序算法。写下来,以后可以直接参考。
var o = {
//冒泡排序(稳定)
popSort:function(arr){
var temp,len;
for(var i =0;len = arr.length,i<len-1;i++){
for(var j = 0;j<len-1-i;j++){ //比较趟数
if(arr[j]>arr[j+1]){ //每趟比较次数len-1-i
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
return arr;
},
//插入排序(稳定)
/*
*假设待排序的记录存放在数组R[1……n]中,初始时,R[1]自成一个有序区,不需要比较,
无序区R[2...n],从i=2起到i=n为止,依次将R[i]插入当前有序区。
带插入的记录R[i]从右向左与有序区的R[j]比较,
若R[j]>R[i],则R[j]后移一个位置
若R[j]<=R[i],则查找结束,j+1即为R[i]插入位置
*
*/
insertSort:function(array) {
var i, j, temp,len = array.length;
for(i = 1; i < len; i ++) {
temp = array[i];
for(j = i - 1; j >= 0; j --){
if(array[j] > temp){
array[j + 1] = array[j];
}else {
break;
}
}
array[j + 1] = temp;
}
return array;
},
//选择排序(不稳定)
selectSort:function (a){
var i,j;
var t;//临时暂存变量
var len = a.length;
for(i = 0;i<len-1;i++){
for(j = i+1 ;j < len; j++){//将第i个元素与其后各个元素比较
if(a[j]<a[i]){//如果第j个元素比第i个元素小,
t = a[i]; //将最小元素与a[i]交换
a[i] = a[j];
a[j] = t;
}
}
}
return a;
},
//快速排序(不稳定)
quicksort:function (a,low,high){
var i = low;
var j = high;
var temp = a[i]; //用子集第一个元素作枢轴记录
if( low < high){
while(i < j){ //从数组两端交替向中间扫描
while((a[j] >= temp) && (i < j)){ j--; }
a[i] = a[j]; //将比数轴记录小的移动到低的那一端
while((a[i] <= temp) && (i < j)){ i++; }
a[j]= a[i]; //将比数轴记录大的移动到高的那一端
}
a[i] = temp; //枢轴记录到位
// quicksort(a,low,i-1); // quicksort(a,j+1,high);
arguments.callee(a,low,i-1);
arguments.callee(a,j+1,high);
}
else{ return; }
return a;
}
};
//o.popSort([1,2,0,-7,11,99,5,-2,2]);
//o.insertSort([1,2,0,-7,11,99,5,-2,2]);
//o.selectSort([1,2,0,-7,11,99,5,-2,2]);
//o.quicksort([1,2,0,-7,11,99,5,-2,2],0,8);
测试结果:
如图: