使用此方法怎么办?当我从低到高或从低到高放置时,它会排列吗?
String [] [] Data = {{“ Eugine”,“ 8”},{“ Ben”,“ 9”},{“ John”,“ 19”},{“ Jairus”,“ 5”}, {“ Sofia”,“ 13”}};
输出排序:从高到低约翰”,19索非亚13本“,9尤金8air鲁斯5排序:从低到高air鲁斯5尤金8本9索非亚13约翰,19
要从字符串中提取数字,请使用Integer.parseInt(str)
。
这可能是优化的,我做了一些更改,但是可以。
import java.util.stream.*;
class Main {
//A little abstraction to make life easier
static class Person {
String name;
int age;
Person(String n, int a) {
name = n;
age = a;
}
public String toString() {
return "[" + name + "," + age + "]";
}
}
public static void main(String[] args) {
String[][] data = {{"Eugine","8"},{"Ben","9"},{"John","19"},{"Jairus","5"},{"Sofia","13"}};
Person[] res = bubblesort(data, false);
System.out.println(Arrays.toString(res));
}
static Person[] bubblesort(String[][] data, boolean lowToHigh) {
//Convert to a nicer structure
Person[] ppl = Arrays.stream(data).map(
(String[] arr) -> new Person(arr[0], Integer.parseInt(arr[1]))
).toArray(Person[]::new);
boolean allGood = false;
while (!allGood) {
allGood = true;
for (int i = 0; i < ppl.length - 1; i ++) {
if ((ppl[i].age > ppl[i + 1].age && lowToHigh) || (ppl[i].age < ppl[i + 1].age && !lowToHigh)) {
swap(ppl, i, i + 1);
if (allGood) allGood = false;
}
}
}
return ppl;
}
static <T> void swap(T[] arr, int i, int j) {
T temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}```