二维数组的选择排序算法是什么?我到处查看和阅读有关2D阵列的内容,但我找不到任何简单直接的内容,所以我在论坛上提出要求。 (我似乎无法围绕如何更改一维数组的类型以使其成为2D数组!)
例如,这个:
name ----- crime ----- year
name1 ---- arson ----- 1996
name2 ---- theft ----- 2003
name3 ---- arson ----- 1976
name4 ---- theft ----- 2010
成为这个:
name ----- crime ----- year
name1 ---- arson ----- 1996
name3 ---- arson ----- 1976
name2 ---- theft ----- 2003
name4 ---- theft ----- 2010
任何帮助都会很棒!谢谢!
以下是我选择排序的代码。他们中的大多数都是正确组织的,但在几行中,我有“纵火”,它不属于我,我不知道为什么会这样。这是我的代码:
for(i = 0; i < 10; i++){
smallest = i;
for(j = i; j < 10; j++){
if(criminals[i][1].compareTo(criminals[j][1]) > 0){
smallest = j;
}
}
temp = criminals[i][1];
criminals[i][1] = criminals[smallest][1];
criminals[smallest][1] = temp;
}
//output
for(i = 0; i < 10; i++){
System.out.println(criminals[i][0] + " - " + criminals[i][1] + " - " + criminals [i][2]);
}
这是我的输入和输出:
Not sorted list:
Al Capone - arson - 2009
Slippery Sal - theft - 2001
Nada - arson - 1987
Slippery Sal - theft - 1999
Salma - assault - 2010
Scooby Doo - theft - 1998
Velma - assault - 1991
Daphne - arson - 1976
Fred - assault - 2003
Shaggy - arson - 2007
Sorted list (by crime):
Al Capone - arson - 2009
Slippery Sal - arson - 2001
Nada - arson - 1987
Slippery Sal - assault - 1999
Salma - arson - 2010
Scooby Doo - assault - 1998
Velma - assault - 1991
Daphne - theft - 1976
Fred - theft - 2003
Shaggy - theft - 2007
答案 0 :(得分:3)
对于你的犯罪事情,请执行以下操作:
static final int SORT_BY_NAME = 0;
static final int SORT_BY_CRIME = 1;
static final int SORT_BY_YEAR = 2;
假设:
Object[10][3] = {{"Name", "CRIME", "YEAR"},...};
现在你的排序算法:
void SelSort(Objects[][] criminals, int sortBy)
{
if (criminals == NULL || criminals.length == 0 || sortBy >= criminals[0].length || sortBy < 0)
return;
int i,j;
Object min;
for (i=0; i < criminals.length ; i++) {
min = criminals[i][sortBy];
for (j = i+1; j < criminals.length; j++){
if (((criminals[j][sortBy].getClass()).cast(min)).compareTo(criminals[j][sortBy]) == 1){//Assuming you can compare them this way else make a method to compare
Object tmp = criminals[j];
criminals[j] = criminals[i];
criminals[i] = tmp;
}
}
}
}
答案 1 :(得分:1)
首先,要挑剔,看起来你有一组Criminal
个对象,比如
class Criminal {
private String name;
private String crime;
private int year;
.
.
.
}
然后你会得到一维犯罪对象。您可以使用常规选择排序算法,而不是比较
criminals[i] < criminals[j]
你会比较
criminals[i].getCrime() < criminals[j].getCrime()
现在,让我们不要挑剔,并假设你确实有一个2-D字符串数组,因此数组的每一行本身就是一个字符串数组。然后只做选择排序,但比较如下:
criminals[i][1] < criminals[j][1]
这是因为
criminals[row][0] is the name
criminals[row][1] is the crime
criminals[row][2] is the year
当您进行交换时,将交换整行,并且您将拥有所需的内容。
答案 2 :(得分:0)
根据您的评论,指定的整体排序条件是:在每行中,必须对元素进行排序。
一次在每个1D阵列(2D阵列)上运行Selection sort算法。
答案 3 :(得分:0)
因此,您的2D数组是String[][] array
。然后初始化数组并执行以下操作
for (int i = 0; i < array.length; i++)
{
int index = i;
for (int j = i + 1; j < array.length; j++)
{
if (array[j][sortByColIndex].compareTo(array[index][sortByColIndex]) < 0)
{
index = j;
}
}
String smallerNumber = scores[index][sortByColIndex];
scores[index][sortByColIndex] = scores[i][sortByColIndex];
scores[i][sortByColIndex] = smallerNumber;
// Displaying sorted value
System.out.print(array[i][0] + "\t" + array[i][1] + "\t" + array[i][2] + "\t");
}