近来又有一次用到了冒泡排序,还是用经典的两个 for 循环 后查看相关子资料,觉得 用一个while 也挺好的,呵呵 关键是以前写时没有 加上一个标记变量,对比了一下,本例子中至少少了三次比较 整理如下 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <TITLE> New Document </TITLE> <META NAME="Generator" CONTENT="EditPlus"> <META NAME="Author" CONTENT=""> <META NAME="Keywords" CONTENT=""> <META NAME="Description" CONTENT=""> </HEAD> <BODY> <mce:script language="javascript"><!-- function bubblesort(a) { var i; //循环的趟数 var j; //要排序的元素数 var iTemp; // 交换数据缓存 var iFlag=1; //是否继续循环标记 var iCount = a.length; i = iCount-1;//循环的次数,注:此处和数组下标没有关系,冒泡排序需要拍 n-1趟, //则 i 是从 1 到 iCount-1 计数,而不是 0 到 iCount-1 var iSum=0; while(i>0&&iFlag==1) { iFlag =0; for(j=0;j<i;j++) // { iSum = iSum +1; if(a[j]>a[j+1]) { iTemp=a[j]; a[j]=a[j+1]; a[j+1]=iTemp; iFlag = 1; } } i--; } alert(iSum); } function onBtClick() { var a = [5,2,732,12,88,22,482,19]; var old = a.toString(); bubblesort(a); var strtnew = a.toString(); alert(old+'**********'+strtnew); } function bubblesort2(a) { var i; //循环的趟数 var j; //要排序的元素数 var iTemp; // 交换数据缓存 var iCount = a.length; var iSum=0; for(i=iCount-1;i>0;i--) { for(j=0;j<i;j++) { iSum = iSum +1; if(a[j]>a[j+1]) { iTemp=a[j]; a[j]=a[j+1]; a[j+1]=iTemp; } } } alert(iSum); } function onBtClick2() { var a = [5,2,732,12,88,22,482,19]; var old = a.toString(); bubblesort2(a); var strtnew = a.toString(); alert(old+'**********'+strtnew); } // --></mce:script> <form method="post" action=""> <label> <input type="" name="" /> </label> <input type="button" value="Submit" οnclick="onBtClick();" /> <input type="button" value="Reset" οnclick="onBtClick2();"/> </form> </BODY> </HTML>