思路:
- 申請一個十個數(shù)的數(shù)組a溉跃,初始化每一項為0
- 讀入5個數(shù)撰茎,假如讀入的是3那就a[3]=1,表示3出現(xiàn)了一次炫惩,其他輸入同理
- 然后打印a[0]~a[10]他嚷,出現(xiàn)了幾次就打印幾次芭毙,
比如a[1]=0退敦,表示沒有1這個數(shù)侈百,然后不打印,
比如a[4]=2锭魔,表示4這個數(shù)出現(xiàn)了2次赂毯,打印2次
......
import java.util.Scanner;
/**
* @author NIWA
* 桶排序
*
* 依次輸入5個數(shù)字,排序
*/
public class Main {
public static void main(String[] args) {
int[] a = new int[11];
//初始化數(shù)組每一個為0
for (int i = 0; i < a.length; i++) {
a[i] = 0;
}
//分別輸入5個數(shù)字
for (int i = 1; i <= 5; i++) {
Scanner mScanner = new Scanner(System.in);
int j = mScanner.nextInt();
a[j]++;//計數(shù)
}
//依次判斷a[0]~a[10]
for (int i = 0; i <= 10; i++) {
for (int j = 0; j < a[i]; j++) {//出現(xiàn)了幾次就打印幾次,順序排,反著排也行上面一行改為
System.out.println(i);
}
}
}
}
但是這個有明顯的缺點肥荔,燕耿,假如現(xiàn)在有5個人的名字和分數(shù)嗎誉帅,
a-2右莱,
b-4亚再,
c-6氛悬,
d-8,
e-4帆谍,
從小到大排序后2-4-4-6-8
這樣就不知道人的排序而只是知道分數(shù)的排序
下面用List集合來改進算法烈涮,首先新建一個Bean類坚洽,
public class Bean {
String name;
int a;
public Bean(int a, String name) {
this.name = name;
this.a = a;
}
public Bean(int a) {
this.a = a;
}
}
類似的讶舰,我們可以
public class Main {
public static void main(String[] args) {
//新建List集合般甲,用于存人名和分數(shù)的標記
List<Bean> mList = new ArrayList<>();
//初始化每一個List中的成績?yōu)?
for (int i = 0; i < 10; i++) {
mList.add(new Bean(0));
}
//分別輸入5個數(shù)字
for (int i = 1; i <= 5; i++) {
Scanner mScanner = new Scanner(System.in);
int j = mScanner.nextInt();
Scanner mScannerString = new Scanner(System.in);
String name = mScannerString.nextLine();
mList.get(j).a = 1;
mList.get(j).name = name;
}
for (int i = 0; i < mList.size(); i++) {
for (int j = 0; j < mList.get(i).a; j++) {
System.out.println(i+mList.get(i).name);
}
}
}
}
用List集合這樣子實現(xiàn)有一個缺點敷存,不能有重復的分數(shù)