归并排序:
递归方法
function sortB(ary){
if(ary.length<=1){
return ary[0].constructor==Array?ary[0]:ary;
}else{
var tempAry=[];
for(var i=0;i<ary.length;i=i+2){
if(ary[i+1]!=undefined){
tempAry[i/2]=sortIn(ary[i],ary[i+1]);
}else{
tempAry[i/2]=ary[i];
}
}
return sortB(tempAry);
}
}
function sortIn(ary1,ary2){
if(typeof ary1!="object"){
ary1=[ary1];
}
if(typeof ary2!="object"){
ary2=[ary2];
}
var ary=[];
var i=0,j=0;
while(i<ary1.length&&j<ary2.length){
if(ary1[i]<=ary2[j]){
ary.push(ary1[i]);
i++;
}else{
ary.push(ary2[j]);
j++;
}
}
if(i<ary1.length){
for(var m=i;m<ary1.length;m++){
ary.push(ary1[m]);
}
}else{
for(var m=j;m<ary2.length;m++){
ary.push(ary2[m]);
}
}
return ary;
}
非递归方法
function sortA(ary){
while(ary.length>1){
var tempAry=[];
for(var i=0;i<ary.length;i=i+2){
if(ary[i+1]!=undefined){
tempAry[i/2]=sortIn(ary[i],ary[i+1]);
}else{
tempAry[i/2]=ary[i];
}
}
ary=tempAry;
}
return ary[0].constructor==Array?ary[0]:ary;
}
function sortIn(ary1,ary2){
debugger;
if(typeof ary1!="object"){
ary1=[ary1];
}
if(typeof ary2!="object"){
ary2=[ary2];
}
var ary=[];
var i=0,j=0;
while(i<ary1.length&&j<ary2.length){
if(ary1[i]<=ary2[j]){
ary.push(ary1[i]);
i++;
}else{
ary.push(ary2[j]);
j++;
}
}
if(i<ary1.length){
for(var m=i;m<ary1.length;m++){
ary.push(ary1[m]);
}
}else{
for(var m=j;m<ary2.length;m++){
ary.push(ary2[m]);
}
}
return ary;
}
快速排序(冒泡排序升级版)
递归方法:
function sortA(ary){
if(ary.length==1||ary.length==0){
return ary;
}
var index= parseInt(ary.length/2);
var left=[];
var right=[];
for(var i=0;i<ary.length;i++){
if(i==index) continue;
if(ary[i]<=ary[index]){
left.push(ary[i]);
}else{
right.push(ary[i]);
}
}
return sortA(left).concat([ary[index]]).concat(sortA(right))
}
非递归方法
function sortB(ary){
if(ary.length<=1) return ary;
var i=0;
var count=ary.length;
var temp=[ary];
while(temp.length<count){
var tempAry=[]
for(var i=0;i<temp.length;i++){
if(temp[i].length&&temp[i].length>1){
tempAry=tempAry.concat(cut(temp[i]));
}else{
tempAry.push(temp[i]);
}
}
temp=tempAry;
}
return temp;
}
function cut(ary){
var index= parseInt(ary.length/2);
var left=[];
var right=[];
var result=[];
for(var i=0;i<ary.length;i++){
if(i==index) continue;
if(ary[i]<=ary[index]){
left.push(ary[i]);
}else{
right.push(ary[i]);
}
}
if(left.length>1){
result.push(left);
}else if(left.length==1){
result.push(left[0]);
}
result.push(ary[index]);
if(right.length>1){
result.push(right);
}else if(right.length==1){
result.push(right[0]);
}
return result;
}