排序方法比较
鸡尾酒 排序
var cocktailSort= function(array) {
var top = array.length - 1, bottom = 0,flag = true,i, j;
while (flag) {
flag = false;
//从左到右到大,把最大的放到每次范围的最右边
for (i = bottom; i < top; i++) {
if (array[i] > array[i + 1]) {
swap(array, i, i + 1);
flag = true;
}
}
top--;
//从右到到左,把最小的放到每次范围的最小边
for (j = top; j > bottom; j--) {
if (array[j] < array[j - 1]) {
swap(array, j, j - 1);
flag = true;
}
}
bottom++;
}
}
var swap = function(array,a,b){
var tmp = array[a];
array[a] = array[b]
array[b] = tmp;
}
侏儒排序
var gnomeSort =function(array){
var len = array.length,i = 0;//把i想象为侏儒
while(i < len){
if (i == 0 || array[i-1] <= array[i])
//array[i-1]与array[i]想象为花盆
//侏儒站于array[i]的前面
i++;//由于顺序正确,侏儒就转而站在array[i+1]的前面
else{
swap(array,i, --i);//如果顺序不正确,交换花盘,站在array[i-1]的前面
test(array)
}
}
}
var swap = function(array,a,b){
var tmp = array[a];
array[a] = array[b]
array[b] = tmp;
}
组合排序
var combSort = function(array){
var gap = array.length;
do{
gap = gap * 10 / 13
if(gap === 9 || gap === 10)
gap = 11
if(gap < 1){
gap = 1
}
var swapped = false;
for(var i=0;i<array.length-gap;i++){
var j = i + gap
if(array[i]>array[j]){
var temp = array[i];
array[i] = array[j];
array[j] = temp;
test(array)
swapped = true
}
}
if(gap == 1 && !swapped){
break;
}
}while(1);
}
希尔排序
又称缩小增量排序:
function shellSort(array) {
var j, i, v, h=1, s=3, k,n = array.length
while(h < n)
h=s*h+1;
while(h > 1) {
h=(h-1)/s;
for (k=0; k<h; k++)
for (i=k+h,j=i; i<n; i+=h, j=i) {
v=array[i];
while(true)
if ((j-=h) >= 0 && array[j] > v)
array[j+h]=array[j];
else
break;
array[j+h]=v;
}
}
}
快速排序
var qurckSort = function(array){
function qsort(array, begin, end){
if(end>begin){
//找到枢纽
var index = partition(array, begin, end);
qsort(array, begin, index-1);
qsort(array, index+1, end);
}
}
//定义三个内部函数
function partition(array, begin, end){
//随意定位枢纽的位置
var index=begin+Math.floor(Math.random()*(end-begin));
//获取枢纽的值
var pivot=array[index];
//获取枢纽后, 将其置放到数组的最后一个位置
swap(array,index,end);
//之后循环数组, 与枢纽进行比较, 相当于重新排数组
for(var i=index=begin;i<end;i++){
//如果当前元素小于枢纽,则交换位置
if(array[i]<pivot){
swap(array, index++, i);
}
}
swap(array, index, end);
return index;
}
function swap(array,a,b){
var tmp = array[a]
array[a] = array[b]
array[b] = tmp ;
}
qsort(array, 0, array.length-1);
}
浙公网安备 33010602011771号