JAVA/选择排序:控制台显示的结果与我输入的结果不同



我正在学习如何实现selection sort

我期望从代码中得到的是升序输出,如:{1,3,4,5,6,7,9}

但控制台显示:9, 4, 1, 6, 5, 3, 7, 9, 7, 1, 4, 5, 3, 6, 9, 7, 6, 1, 4, 3, 5, 9, 7, 6, 5, 1, 3, 4, 9, 7, 6, 5, 4, 1, 3, 9, 7, 6, 5, 4, 3, 1

我应该改变什么才能得到正确的结果?

这是我的代码:

public static void main(String[] args) {
int[]arr = {4,6,1,9,5,3,7};

for(int i = 0; i<arr.length-1; i++) {
for(int j = i+1; j<arr.length; j++) {
if(arr[i]<arr[j]) {
int a=arr[i];
arr[i]=arr[j];
arr[j]=a;


}
}
for (int b = 0; b <arr.length; b++) {
System.out.print(arr[b] + ", ");
}
}

在排序时打印数组。相反,在完成排序后打印数组-

public static void main(String[] args) {
int[] arr = {4, 6, 1, 9, 5, 3, 7};
for (int i = 0; i < arr.length - 1; i++) { // first loop
for (int j = i + 1; j < arr.length; j++) { // nested loop
if (arr[i] < arr[j]) { // if condition
int a = arr[i];
arr[i] = arr[j];
arr[j] = a;
} // if condition ends
} // nested loop ends
} // first loop ends
// Now the array is sorted, it's good to print.
for (int b = 0; b < arr.length; b++) {
System.out.print(arr[b] + ", ");
}
}

还有一个问题。尽管您的排序可以工作,但您的实现并不是真正的selection sort。这是bubble sort的实现。关键的区别在于,在selection sort中,您需要找到最小值并将其放置在ith的位置,以对应每个i。所以每次迭代只交换一次。在冒泡排序中,我们像你一样反复交换。

同样,正如在评论中指出的,对于升序,您必须翻转到交换的条件。所以正确的实现应该是-

public static void main(String[] args) {
int[] arr = {4, 6, 1, 9, 5, 3, 7};
for (int i = 0; i < arr.length - 1; i++) {
int minIndex = i;
for (int j = i + 1; j < arr.length; j++) {
if (arr[minIndex] > arr[j]) {
minIndex = j;
}
}
int tmp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = tmp;
}
for (int b = 0; b < arr.length; b++) {
System.out.print(arr[b] + ", ");
}
}

使用Arrays.sort(arr)有一个更简单的方法

public static void main(String[] args) {
int[] arr = {4,6,1,9,5,3,7};
Arrays.sort(arr);
System.out.print(Arrays.toString(arr));
}
}

选择排序- java代码

class selectionsort{
public static void sort(int[] arr){
int temp,min;
for(int i=0;i<arr.length;i++)
{
min=i;
for(int j=i+1;j<arr.length;j++)
{
if(arr[min]>arr[j])
{
min=j;
}
}
temp=arr[min];
arr[min]=arr[i];
arr[i]=temp;
}
}

public static void main(String [] args){
int ar[]={4,6,1,9,5,3,7};
sort(ar);
System.out.print("After sort :");
for(int j=0;j<ar.length;j++){
System.out.print(ar[j]+" ");
}
}
}

最新更新