算法第4版-算法2.1 选择排序一些奇怪的问题
选择排序本来是一个比较简单的排序 今天依照书的方法缺出现奇怪的问题,因为后续的排序算法都是基本这套模板来写,所以必须解决
排序胡乱了,开始我以为是自己打漏或者打错了代码但是看代码逻辑没有问题,对照书本也没有打漏.后来检查的时候发现问题所在了
在元素比较的时候我手多添加了一个注释 @SuppressWarnings("unchecked"),导致排序错误百度了 @SuppressWarnings("unchecked")的作用如下:该批注的作用是给编译器一条指令,告诉它对被批注的代码元素内部的某些警告保持静默。
@SuppressWarnings 批注允许您选择性地取消特定代码段(即,类或方法)中的警告。其中的想法是当您看到警告时,您将调查它,如果您确定它不是问题,
您就可以添加一个 @SuppressWarnings 批注,以使您不会再看到警告。虽然它听起来似乎会屏蔽潜在的错误,但实际上它将提高代码安全性,因为它将防止
您对警告无动于衷 — 您看到的每一个警告都将值得注意。
@SuppressWarnings 解释的传送门:https://blog.csdn.net/hunhun1122/article/details/72356228
附上代码:
<pre>
//选择排序
public class Example_Selection {
//算法
public static void sort(Comparable[] a) {
int N=a.length;
for (int i=0;i<N;i++) {
int min =i;
for(int j =i+1;j<N;j++) {
if(less(a[j], a[min]))
min =j;
}
exch(a,i,min);
}
}
//元素比较
private static boolean less(Comparable v,Comparable w) {
return v.compareTo(w)<0;
}
//元素交换位置
private static void exch(Comparable[] a,int i,int j) {
Comparable t=a[i];
a[i]=a[j];
a[j]=t;
}
//打印数组
private static void show(Comparable[] a) {
for(int i=0;i<a.length;i++)
StdOut.print(a[i]+" ");
StdOut.println();
}
//测试数组元素是否有序
public static boolean isSorted(Comparable[] a) {
for (int i=1;i<a.length;i++) {
if(less(a[i],a[i-1]))
return false;}
return true;
}
public static void main(String[] args) {
//从标准输入读取字符串,将它们排序并输出
Scanner sca=new Scanner(System.in);
String s=sca.next();
String[] a= s.split(",");
Integer[] num = new Integer[a.length];
for (int i = 0; i < a.length; i++) {
num[i] = Integer.parseInt(a[i]);
}
sort(num);
assert isSorted(num);
show(num);
}
}
</pre>