java - 选择排序检查是否正确
问题描述
检查算法是否正确,我通过编写来开发它,但是在线给出的算法是在第一个 for 循环中减小大小的地方:|
class Selectionsort {
public void sort(int[] arr,int size) {
int minimum = 0;
for(int j =0;j < size;j++) {
for(int i = j; i < size;i++) {
if(arr[i] < arr[minimum]) {
minimum = i;
}
}
int temp = arr[minimum];
arr[minimum] = arr[j];
arr[j] = temp;
System.out.println("\n");
for(int x : arr) {
System.out.print( x + " ");
}
}
}
}
public class HEllo {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
Random rand = new Random();
int size = input.nextInt();
int[] arr = new int[size];
for(int i=0; i< size;i++) {
arr[i] = rand.nextInt(20);
}
for(int i : arr) {
System.out.print(i + " ");
}
System.out.println("\n");
Selectionsort S = new Selectionsort();
S.sort(arr, size);
}
}
解决方案
不,你的方法不正确。
测试运行:
int[] a = { 3, 5 };
sort(a, a.length);
System.out.println(Arrays.toString(a));
预期输出:
[3, 5]
观察到的输出:
3 5 5 3 [5, 3]
我相信您的问题是minimum
在外循环的迭代之间存在的值。所以如果j
你找到一个minimum = j
,那么下一个j
,minimum
仍然是j - 1
,所以你将交换到已经排序的数组部分,实际上破坏了你已经完成的排序。
我建议您改为minimum
在外for
循环内声明。然后它也会更清楚,这0
不是正确的初始值。我把它留给你找到一个正确的。
推荐阅读
- django - 将 Django 应用程序重新部署到 Google Kubernetes Engine (GKS)
- reactjs - 将 React Router 与 Switch 一起使用,并且在更改路由时无法让页面呈现不同的组件
- vue.js - Vue:计算属性会监视内部数据变化吗?
- javascript - 如何使用 jQuery 滚动带有按钮的 div?
- drawing - 圆角矩形的对角线尺寸
- python - 带有 '=' 或 '!=' 运算符的数学风格表达式的正则表达式
- docker - NodeJs 复制包到 docker 镜像
- list - 如何在列表中添加括号?
- ckeditor - 有没有办法为 CK Editor 创建自定义插件以支持内联 SVG?
- python - 如何从我的字符串中提取 Url 数据