冒泡排序程序實現的過程:
靜態數組排序
1.獲取靜態數組arr['數據1','數據2','數據3','數據4','數據5','數據6','數據7',......];
2.使用for循環嵌套
? ? 2.1????外部for循環變量取值范圍????i=0;i < arr.length-1;i=0;與數組的下標保持一致;arr.length-1表示數組最大下標,根據冒泡排序的原理,例如數組長度(arr.length)為5,則排序4(arr.length-1)次即可,那么對應的下標取值范圍是0~3(arr.length-2);
????2.2? ? 外部for循環的作用:外層for循環控制排序的次數
????2.3? ? 內部for
????????2.3.1? ? 內部for循環的循環變量取值:j=0;與數組的下標保持一致;j < arr.length-1-i;數組長度為arr.length;比較次數為arr.length-1;但是,隨著第一次排序后,最后一位(或第一位)的值保持不變,那么沒有必要再進行多余的比較,第一次排序完后,下次比較次數arr.length-1,第二次排序完后,下一次比較次數arr.length-2,第i次排序完后,下次比較次數arr.length-i;
? ? ? ? 2.3.2內部for循環的用處:內層for循環用于控制比較的次數
3.內部for循環使用if語句進行判斷,滿足條件則進行數據交換。
? ? 3.1????if(arr[j] < arr[j+1] )
? ? ? ? 判斷當前兩個元素的大小,如果arr[j+1]比arr[j]大,那么將arr[j+1]和arr[j]數據互換。兩個變量數據交換,需要用第三個臨時變量temp
? ? 3.2????1.將arr[j]賦值給temp變量????2.將arr[j+1]賦值給arr[j]? ? 3.將temp(原始的arr[j])值賦值給arr[j+1],完成arr[j]和arr[j+1]的數據互換? ?
4. ????console.log(arr);將排序好的數組輸出在控制臺上
動態數組排序
1.獲取數組的元素的個數(數組長度)
? ??var num=+prompt("請輸入您要排序的個數");//提示用戶輸入需要排序的個數
2.使用構造函數創建數組,數組長度為輸入的值????
????var arr=new Array(num);
3.使用for循環提示用戶輸入所有數組元素
????提示用戶輸入數組元素:
????????arr[m]=+prompt("共"+num+"個數,請輸入第"+(m+1)+"個元素");
4.遍歷原始數組
????當用戶輸入完所有元素,遍歷數組輸出元素
????????document.write("您輸入的數組為:"+arr+"換行符");
5.定義臨時變量temp,該變量用于臨時存儲數組元素
?????var temp=0;
6.外層for循環控制排序的次數
7.設置監視器變量flag
????var flag=true;
????flag變量用于監視當前所有元素是否按照要求排序成功。此變量必須位于 外for循環里面并且 內for循環前面,外for循環執行一次,flag初始化一次;
8.內for循環控制每次排序比較的次數
9.打印輸出當前比較的兩個元素
????????document.write(arr[j]+","+arr[j+1]+"空格");
? ? 空格的作用是與下一組隔開距離
10.實現數據交換
10.1? ??判斷當前兩個元素的大小
? ??????if(arr[j] < arr[j+1] )
? ??????如果arr[j+1]比arr[j]大,那么將arr[j+1]和arr[j]數據互換。兩個變量數據交換,需要用第三個臨時變量temp
10.2? ??將arr[j]賦值給temp變量? ???temp=arr[ j ];
10.3????將arr[j+1]賦值給arr[j]??????arr[j]=arr[j+1];
10.4????將原始的arr[j]值賦值給arr[j+1],完成arr[j]和arr[j+1]的數據互換????? arr[j+1]=temp
10.5? ??發生數據互換,表示排序尚未結束,監視器變量flag顯示false;????? flag=false;
10.6????提示用戶發生數據交換? document.write("交換了"+" 空格符");? ? 內部for循環結束
11.將本次排序結果打印輸出的頁面上,本次外for循環完成,輸出數組并換行
????document.write("第"+(i+1)+"次排序結果:"+arr+"換行符");
12.判斷監視器變量外
????if(flag){
????????? break;//終止外部for循環
????}
????break;終止外部for循環
? ? ? ?根據監視器變量值決定是否排序成功。flag為true,表示沒有發生數據交換,即完成排序,需要執行循環體,終止外部for循環的繼續執行。如果為false,則表示排序尚未結束,繼續執行外部for循環,不執行循環體的內容
13.外for循環結束,執行結果如圖: