在 Java 中排序后保留数组中元素的索引
Keeping indexes of an elements in the array after sorting in Java
我想要排序数组而不实际更改其数据。所以我只想将其索引保留在另一个数组中。为此,我使用冒泡排序算法,并且在每个交换步骤中,我更改新数组的元素,以保留实际数组的索引。那是我的代码,但它不能正常工作
int[] bSort(int[] arrivalTimes) {
int[] sequence = new int[arrivalTimes.length];
for (int i = 0; i < sequence.length; i++) {
sequence[i] = i;
}
for (int i = 0; i < arrivalTimes.length - 1; i++) {
for (int j = i + 1; j < arrivalTimes.length; j++) {
if (arrivalTimes[i] > arrivalTimes[j]) {
int temp = sequence[i];
sequence[i] = sequence[j];
sequence[j] = temp;
}
}
}
return sequence;
}
所以如果输入数组是 [2, 5, 1, 0, 4]
那么序列数组应该是[3, 2, 0, 4, 1](实际数组的索引)
您也忘记了对实际数组进行排序。如果 arrivalTimes 数组未排序,您的条件将不会按您期望的方式运行。
int[] bSort(int[] arrivalTimes) {
int[] sequence = new int[arrivalTimes.length];
for (int i = 0; i < sequence.length; i++) {
sequence[i] = i;
}
for (int i = 0; i < arrivalTimes.length - 1; i++) {
for (int j = i + 1; j < arrivalTimes.length; j++) {
if (arrivalTimes[i] > arrivalTimes[j]) {
int temp = sequence[i];
sequence[i] = sequence[j];
sequence[j] = temp;
int temp2 = arrivalTimes[i];
arrivalTimes[i] = arrivalTimes[j];
arrivalTimes[j] = temp2;
}
}
}
return sequence;
}
虽然这是一个低效的解决方案。我怀疑这是某些算法分配的一部分,所以我会把优化留给你。
我想要排序数组而不实际更改其数据。所以我只想将其索引保留在另一个数组中。为此,我使用冒泡排序算法,并且在每个交换步骤中,我更改新数组的元素,以保留实际数组的索引。那是我的代码,但它不能正常工作
int[] bSort(int[] arrivalTimes) {
int[] sequence = new int[arrivalTimes.length];
for (int i = 0; i < sequence.length; i++) {
sequence[i] = i;
}
for (int i = 0; i < arrivalTimes.length - 1; i++) {
for (int j = i + 1; j < arrivalTimes.length; j++) {
if (arrivalTimes[i] > arrivalTimes[j]) {
int temp = sequence[i];
sequence[i] = sequence[j];
sequence[j] = temp;
}
}
}
return sequence;
}
所以如果输入数组是 [2, 5, 1, 0, 4]
那么序列数组应该是[3, 2, 0, 4, 1](实际数组的索引)
您也忘记了对实际数组进行排序。如果 arrivalTimes 数组未排序,您的条件将不会按您期望的方式运行。
int[] bSort(int[] arrivalTimes) {
int[] sequence = new int[arrivalTimes.length];
for (int i = 0; i < sequence.length; i++) {
sequence[i] = i;
}
for (int i = 0; i < arrivalTimes.length - 1; i++) {
for (int j = i + 1; j < arrivalTimes.length; j++) {
if (arrivalTimes[i] > arrivalTimes[j]) {
int temp = sequence[i];
sequence[i] = sequence[j];
sequence[j] = temp;
int temp2 = arrivalTimes[i];
arrivalTimes[i] = arrivalTimes[j];
arrivalTimes[j] = temp2;
}
}
}
return sequence;
}
虽然这是一个低效的解决方案。我怀疑这是某些算法分配的一部分,所以我会把优化留给你。