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

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

Java 這個排序哪里錯了,為什么遍歷失敗啊,來個大神,急急急

Java 這個排序哪里錯了,為什么遍歷失敗啊,來個大神,急急急

qq_曹振_0 2018-04-09 09:46:50
package test;public class SelectSort {?? ?public static int[]sort(int[]a){?? ??? ?int flag;?? ??? ?for (int i = 0; i < a.length-1; i++) {?? ??? ??? ?//選擇排序 首先找到整個數列最小值?? ??? ??? ?//然后讓最小值在最低位,繼續遍歷?? ??? ??? ? flag=i;?? ??? ??? ?for (int j = i+1; j < a.length; j++) {?? ??? ??? ??? ?if(a[j]<a[i]){?? ??? ??? ??? ??? ?flag=j;?? ??? ??? ??? ??? ??? ??? ?}?? ??? ??? ?}?? ??? ??? ?if(flag!=i){?? ??? ??? ??? ?int temp=a[i];?? ??? ??? ??? ?a[i]=a[flag];?? ??? ??? ??? ?a[flag]=temp;?? ??? ??? ??? ?}?? ??? ??? ??? ??? ?}?? ??? ?return a;?? ?}?? ?public static void main(String[] args) {?? ?int[]a={11,10,55,78,100,111,45,56,4,100,32,12,79,90,345,1000};?? ?SelectSort.sort(a);?? ?for (int i : a) {?? ??? ?System.out.print(i+" ");?? ?}?? ?}}失敗結果:4 10 12 55 90 100 32 45 11 79 56 78 100 111 345 1000
查看完整描述

4 回答

已采納
?
半枯

TA貢獻101條經驗 獲得超45個贊

原因是存在比a[i]為小的多個a[j],而你要在第二個循環里拿一個a[i]和多個a[j]換來換去。換到的是最后一次出現的小值。

查看完整回答
1 反對 回復 2018-04-09
  • qq_曹振_0
    qq_曹振_0
    一語解惑,多謝閣下了。最后 把a[j]<a[i]改為a[j]<a[flag],就可以選出最小值了, ps自己看真的看好久看不出來
  • 半枯
    半枯
    樓下大神已經說了怎么改,我就幫你解釋解釋為什么
?
產品經理不是經理

TA貢獻481條經驗 獲得超143個贊

flag=i;
for?(int?j?=?flag+1;?j?<?a.length;?j++)?{
????if(a[j]<a[flag]){
????????flag=j;
????}
}??
//你的部分代碼改成這樣就可以了。

https://img1.sycdn.imooc.com//5acc1818000112b804770124.jpg

//補充運行結果。

查看完整回答
2 反對 回復 2018-04-09
點擊展開后面1
?
慕粉3166282

TA貢獻28條經驗 獲得超3個贊

樓上說得對


查看完整回答
反對 回復 2018-04-09
?
奔跑的蟲子

TA貢獻33條經驗 獲得超21個贊

沒細看,不過for循環有點問題,可能出現在這兒,你回頭試一試。 for (int i = 0; i < a.length-1; i++) 改為for (int i = 0; i < a.length; i++);
查看完整回答
反對 回復 2018-04-09
  • 4 回答
  • 1 關注
  • 2253 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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