java選擇排序法程式

2009-04-29 5:45 am
未排序前:61 87 80 58 40 50 20 13 71 45
after pass 1:-13- 87 80 58 40 50 61* 71 45
after pass 2:-13- -20- 80 58 40 50 87* 61 70 45
after pass 3:-13- -20- -40- 58 80* 50 87 61 71 45
after pass 4:-13- -20- -40- -45- 80 50 87 61 70 58*
after pass 5:-13- -20- -40- -45- -50- 80* 87 61 71 58
after pass 6:-13- -20- -40- -45- -50- -58- 87 61 71 80*
after pass 7:-13- -20- -40- -45- -50- -58- -61- 87* 71 80
after pass 8:-13- -20- -40- -45- -50- -58- -61- -71- 87* 80
after pass 9:-13- -20- -40- -45- -50- -58- -61- -71 -80- 87*
排序後:13 20 40 45 50 58 61 71 80 87
設計一Java執行程式,使用選擇排序法將資料由小排至大,並在螢幕顯示排序過程

回答 (5)

2009-04-29 7:10 am
✔ 最佳答案
寫了一個小時…參考一下吧

import java.util.Arrays;

public class aaa {
public static void main(String[] args) {
int[] a = { 61, 87, 80, 58, 40, 50, 20, 13, 71, 45 };
sort(a);
}

static int ok = 0;
static int times = 1;

private static int[] sort(int[] temp) {
int[] compare = temp.clone();
Arrays.sort(temp);
boolean flag = true;
for (int i = 0; i < temp.length; i++) {
if (compare[i] != temp[i]) {
flag = false;
}
}
if (flag) {
return null;
} else {
int min = 1000;
int oldMin = 1000;
int count = 0;// 紀錄最小值位置
for (int i = ok; i < compare.length; i++) {
min = Math.min(oldMin, compare[i]);
if (min != oldMin) {
count = i;
}
oldMin = min;
}
int old = compare[ok];
compare[ok++] = min;
compare[count] = old;
System.out.printf("\nafter pass %d :", times++);
for (int i : compare) {
System.out.print(i + " ");
}
return sort(compare);
}
}
}



2009-04-28 23:18:41 補充:
int[] a = { 61, 87, 80, 58, 40, 50, 20, 13, 71, 45 };
System.out.print("未排序前:");
for(int i : a){
System.out.print(i+" ");
}
sort(a);
System.out.print("\n排序後:");
for(int i : a){
System.out.print(i+" ");
}

2009-04-29 09:28:32 補充:
樓下的…for (i = 0; i < X.length; i++)用這樣子跑迴圈控制幾不是很好哦
而且你的結果
是從after pass0開始
結尾則是
after pass8:13--20--40--45--50--58--61--71--80--87--
after pass9:13--20--40--45--50--58--61--71--80--87--
跟版大有出入= =

2009-04-29 09:40:11 補充:
版大需要那些標記嗎,如果需要的話再開個版5點的即可我再幫你改,不用的話就這樣嚕~~
因為如果在這裡改會有字數的限制

2009-04-30 09:11:14 補充:
嗯…那你參考資料應該寫看書哦~

2009-04-30 09:16:26 補充:
嗯…寫的出來都算是很好
但是寫錯畢竟是事實
在學校上也能央求老師的同情而已不要算你錯
在工作上這個就成了一個很大的bug了
參考: mySelf, 加一下這個印頭跟尾
2009-04-29 4:28 pm
其實那沒有甚麼意思
只是交換之後的位置

例如:13和87交換
所以87有*記號
而-13-是代表交換後的位置
2009-04-29 9:47 am
if that is -13- 87
i guest nobody know what happened.

so~
i guest that should be -13* 87

((天啊~我竟然在用我的破英文回答~"~!!請大家不要吐血))

2009-04-29 13:10:34 補充:
樓下的…for (i = 0; i < X.length; i++)用這樣子跑迴圈控制幾不是很好哦

我第一次看到回答002時也覺得這怪怪的很
也是跟001有同樣的感覺~多跑了很多次
2009-04-29 7:51 am
public class testsort1 {

void selectSort(int[]X){
int i;
for(i=0;i<X.length ;i++){
int min = findMin(X,i);
swap(X,i,min);
System.out.print("after pass"+i+":");

for (int j=0;j<10;j++){
System.out.print(X[j]+"--");
}
System.out.println();
}
}
int findMin(int[]X,int i){
int j,min = i;
for(j=i+1;j<X.length ;j++){
if(X[j]<X[min])
min=j;
}
return min;
}

void swap(int[]X,int i,int j){
int tmp = X[i];
X[i]=X[j];
X[j]=tmp;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub

int[] X = { 61, 87, 80, 58, 40, 50, 20, 13, 71, 45 };
System.out.print("未排序前: ");
for (int i=0;i<10;i++){
System.out.print(X[i]+"--");
}
System.out.println();
testsort1 T = new testsort1();
T.selectSort(X);

System.out.print("排序後: ");
for (int i=0;i<10;i++){
System.out.print(X[i]+"--");
}


}

}

2009-04-28 23:57:08 補充:
這是選擇排序法的程式實例 ..整個copy 去就ok啦

2009-04-29 19:17:04 補充:
樓上的你有學過選擇排序法嗎..
我這個是從書上看到的
且你說我的問題..從0開始是嗎..我覺得沒差吧
頂多把i加1就好了

2009-04-29 19:19:03 補充:
for(i=0;i



2009-04-29 19:21:22 補充:
for(i=0;i




2009-04-29 22:37:54 補充:
我怎不覺這樣控制那裡不好...頂多改成

for (i = 0; i < X.length -1 ; i++) 不就好了




樓下的…for (i = 0; i < X.length; i++)用這樣子跑迴圈控制幾不是很好哦
參考: 自己
2009-04-29 6:59 am
What will the display be if the list is:
13 87
Should that be:
-13- 87
or
-13* 87


收錄日期: 2021-04-29 22:18:17
原文連結 [永久失效]:
https://hk.answers.yahoo.com/question/index?qid=20090428000015KK09235

檢視 Wayback Machine 備份