第一個寫法寫了2個for ,不太好理解,請大家幫我解釋一下,第二個寫的對嗎?還有一些小的疑問,圖片上標注了。
js 冒泡排序
undertale
2017-03-23 14:19:14
TA貢獻9條經驗 獲得超1個贊
第一重循環(第一個for)是為了找到第i小的數,比如當i=0時,找的是第一小的數,放在數組最前面,當i=1時,找除了arr[0]的最小的數也就是第二小的數,以此類推。第二重循環(第二個for)是為了遍歷數組-i個數,依次和他們比,比誰更小,最小的放到i這個位置。
第二個
?我改了一下,可以這么寫“var len = arr.length,j,temp;”這個是冒泡排序,每次最外面的循環一次,就會把數組中最大數排到最后
??function?bubbleSort(arr){
????var?len?=?arr.length,j,temp;
????var?i=len;
????while(i>0){
????????for(?j?=?0;?j?<?len?-?1;j++){
????????????if(arr[j]?>?arr[j+1]){
????????????????temp?=?arr[j];
????????????????arr[j]?=?arr[j+1];
????????????????arr[j+1]?=?temp;
????????????}
????????}
????i--;
????}
????return?arr;
}
TA貢獻376條經驗 獲得超318個贊
注意,你這個不是冒泡排序,是選擇排序哦,第一個for的i = 0是數組的第1個元素,而第二個for是用來表示從比i大1的位置開始循環。來把剩下的元素與i進行比較,當找到就進行交換,循環結束就讓i加一,然后j仍然比i大一,第二個那里不是i,是len--;
<script>
????????????function?bubbleSort(arr){
????????????????var?len?=?arr.length,j;
????????????????while(len>0){
????????????????????for?(var?j?=?0;j?<?len?-?1;j++)?{
????????????????????????if(arr[j]?>?arr[j+1]){
????????????????????????????var?temp?=?arr[j];
????????????????????????????arr[j]?=?arr[j+1];
????????????????????????????arr[j+1]?=?temp;
????????????????????????}
????????????????????}
????????????????????len--;
????????????????}
????????????????return?arr;
????????????}
????????????arr1?=?[4,6,1,5,8,7,9,2];
????????????console.log(bubbleSort(arr1))<script>
???function?bubbleSort(arr){
???????var?len?=?arr.length;
???????for(var?i?=?0;?i?<?len;i++?){
???????????for(var?j?=?0;?j?<?len?-?i?-?1;j++){
???????????????if(arr[j]?>?arr[j+1]){
???????????????????var?temp?=?arr[j];
???????????????????arr[j]?=?arr[j+1];
???????????????????arr[j+1]?=?temp;
???????????????}
???????????}
???????}
???????return?arr;
???}
????var?array?=?[10,9,8,7,6,5,4,3,2,1];
????console.log(bubbleSort(array));/*每一次外層循環把當前數列中最大值排到最后,
????并減少數組長度,就不再遍歷最后的最大,每內層循環一遍就會找出一個當前數列最大的值*/這才是冒泡排序
TA貢獻3593條經驗 獲得超1個贊
TA貢獻5條經驗 獲得超2個贊
二次因為你每次從數組中取一個數(一次FOR,遍歷全數組-1各數),和數組中剩下的數比(二次FOR,遍歷全數組減去第一個FOR中已經比較過的數)。 第二個有錯,別看了
舉報