所以第一个开关肯定发生在最低值3和5之间,但在此之后它不会继续。这让我觉得其中一个for循环有问题吗?
公共类SelectionSort
{
public static void main(String [] args)
{
int [] list; list = new int[5]; list[0] = 4; list[1] = 5; list[2] = 12; list[3] = 9; list[4] = 3; for (int i = 0; i < list.length-1; ++i) { int index = i; for (int j = 1; j < list.length; ++j) { if (list[j] < list[index]) { int temp = list[j]; list[j] = list[index]; list[index] = temp; } } } for (int k = 0; k < list.length; ++k) { System.out.print(list[k] + ", "); } }
}
答案 0 :(得分:0)
在if (list[j] < list[index]) {
之后,如果布尔语句得到满足,则必须更新索引,因此需要index = j
并在
见下文:
public class MySelectionSort {
public static int[] doSelectionSort(int[] arr){
for (int i = 0; i < arr.length - 1; i++)
{
int index = i;
for (int j = i + 1; j < arr.length; j++)
if (arr[j] < arr[index])
index = j;
int smallerNumber = arr[index];
arr[index] = arr[i];
arr[i] = smallerNumber;
}
return arr;
}
答案 1 :(得分:0)
简短版:
for (int i = 0; i < list.length-1; i++)
for (int j = i+1; j < list.length; j++)
if (list[j] < list[i]) {
int temp = list[j];
list[j] = list[i];
list[i] = temp;
}
for (int k = 0; k < list.length; k++) {
System.out.print(list[k] + ", ");
}
答案 2 :(得分:0)
for (int i = 0; i < list.length; ++i) {
int index = i;
for (int j = i + 1; j < list.length; ++j) {
if (list[j] < list[index]) {
index = j; }}
if (index != i) {
int temp = list[i];
list[i] = list[index];
list[index] = i; }}
为了减少掉期数量,j上的循环应该只是与项目i交换的最佳项目。对于i的每个值,最多应该有一个交换。 (那是什么使它成为一个选择排序。如果你为每个我做多次交换,你可能也在做冒泡排序。
但这是为了提高效率。你的代码不起作用的原因是你在j = 1而不是j = i + 1的j上开始循环。