使用选择排序的java排序2D数组
我使用了以下代码-
x[][]
是要排序的数组
void sort() {
int max1, max2, s;
for (int i = 0; i < row; i++) {
for (int j = 0; j < column; j++) {
max1 = i;
max2 = j;
for (int k = i; k < row; k++) {
if (k == i) { // need to improve this part
for (int l = j; l < column; l++) {
if (x[k][l] > x[max1][max2]) {
max1 = k;
max2 = l;
}
}
} else {
for (int l = 0; l < column; l++) {
if (x[k][l] > x[max1][max2]) {
max1 = k;
max2 = l;
}
}
}
}
s = x[max1][max2];
x[max1][max2] = x[i][j];
x[i][j] = s;
}
}
}
我想删除if
{
(我知道有更简单的方法可以做到这一点,但我正在尝试使用选择排序)
# 1 楼答案
我真的不喜欢你命名变量的方式。我建议对行和列使用r、c作为前缀,对值使用v,然后对数组上的两个循环使用外部和内部作为后缀,对最大值使用Max
使用vMax可以增加算法的内存局部性——通过避免查找内存中较远的部分,它在处理大型数组时应该执行得更快一些。并不是说,与快速排序相比,选择排序永远都不会有竞争力:渐进复杂性仍然很可怕
这使得一切都更容易阅读:
请注意,我已经删除了最里面的条件:它应该执行一次,而且只能执行一次,以在计算所有剩余行之前完成当前行
还要注意的是,我还没有测试过这段代码。这看起来是正确的,但要谨慎对待
# 2 楼答案
就像我提到的,我目前没有测试这个的媒介,但我相信这应该有效。如果不让我知道,我会相应地修改
以下是我的解决方案:
}
此解决方案执行选择排序,效率是当前解决方案的数倍。当前解决方案的问题是嵌套循环太多。嵌套循环会在效率方面产生巨大的问题,因此您希望尽量减少它们的使用和深度
希望这能起作用,如果不能,请发表评论,我会修复它!还有任何关于我做了什么的问题,我会评论和解释我做了什么