亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

js 冒泡排序

js 冒泡排序

undertale 2017-03-23 14:19:14
第一個寫法寫了2個for ,不太好理解,請大家幫我解釋一下,第二個寫的對嗎?還有一些小的疑問,圖片上標注了。
查看完整描述

3 回答

已采納
?
zzylove

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;

}
查看完整回答
反對 回復 2017-03-23
  • undertale
    undertale
    我貼的第一個代碼不是冒泡排序嗎?樓上說是選擇排序?
  • zzylove
    zzylove
    不是冒泡排序,確實是選擇。經典的冒泡排序就是相鄰倆個數交換,你貼的一個代碼,不是相鄰的兩個數進行交換,而是每次都會和別的數比較,從中選出最小的。冒泡排序,就和字面的意思,泡泡慢慢的冒上去,通過相鄰的兩個數交換,慢慢的把最大的數頂上去。比如1,5,2,4,3,。它的變化是1,5,2,4,3->1,2,5,4,3->1,2,4,5,3->1,2,4,3,5->1,2,3,4,5。但是如果是一個方法,它的變化是這樣1,5,2,4,3->1,2,5,4,3->1,2,4,5,3->1,2,3,5,4->1,2,3,4,5 在第3次的變化中就可以發現是有區別的,選擇排序每一次從待排序的數中選出最?。ɑ蜃畲螅┑囊粋€元素,存放在序列的起始位置,直到全部待排序的數排完。
  • undertale
    undertale
    第一個變化順序應該是15243-12543-12345吧?12543以后不是應該5和3交換位置了嗎?
點擊展開后面9
?
西蘭花偉大炮

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));/*每一次外層循環把當前數列中最大值排到最后,
????并減少數組長度,就不再遍歷最后的最大,每內層循環一遍就會找出一個當前數列最大的值*/

這才是冒泡排序

查看完整回答
2 反對 回復 2017-03-23
  • 西蘭花偉大炮
    西蘭花偉大炮
    因為每次循環都會找出一個最大的數,也就是j循環里會減一個,也就是長度會減1,下一次就不再循環那個最大的數了
?
qq_聆愛依魂_0

TA貢獻5條經驗 獲得超2個贊

二次因為你每次從數組中取一個數(一次FOR,遍歷全數組-1各數),和數組中剩下的數比(二次FOR,遍歷全數組減去第一個FOR中已經比較過的數)。 第二個有錯,別看了

查看完整回答
反對 回復 2017-03-23
  • undertale
    undertale
    請問第二個哪里錯了,我再博客園看到的。我自己看不出來
  • 3 回答
  • 0 關注
  • 2087 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號