算法第4版-算法2.1 选择排序一些奇怪的问题

2018-10-30  本文已影响0人  Sakura_CCC

选择排序本来是一个比较简单的排序 今天依照书的方法缺出现奇怪的问题,因为后续的排序算法都是基本这套模板来写,所以必须解决

排序胡乱了,开始我以为是自己打漏或者打错了代码但是看代码逻辑没有问题,对照书本也没有打漏.

后来检查的时候发现问题所在了

在元素比较的时候我手多添加了一个注释 @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>

上一篇下一篇

猜你喜欢

热点阅读