问题描述
我正在学习如何实现 selection sort
。
我对代码的期望是升序输出,例如:{1,3,4,5,6,7,9}
但控制台显示:9,1,9,1
我应该改变什么才能得到正确的结果?
这是我的代码:
public static void main(String[] args) {
int[]arr = {4,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,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,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,7};
sort(ar);
System.out.print("After sort :");
for(int j=0;j<ar.length;j++){
System.out.print(ar[j]+" ");
}
}
}