我写了一个方法来在不使用排序的情况下找到数组中第二小的数字。我想我可以扩展相同的逻辑来找到数组中的第三小数字..但是我意识到这并不容易..我的大脑一定是糊涂了由于缺乏睡眠或其他原因。下面是我的 findSecondSmallest 和 findThirdSmallest 代码。有人可以为以后纠正我的逻辑缺陷吗?
public class ArrayElementSelection{
public static int findSecondSmallest(int[] a){
int N = a.length;
int min = 0;
int secondSmallest = 0;
for(int i=1;i<N;i++){
if(a[i] < a[min]){
secondSmallest = min;
min = i;
}else if(a[i] < a[secondSmallest]){
secondSmallest = i;
}
}
return a[secondSmallest];
}
public static int findThirdSmallest(int[] a){
int N = a.length;
int min = 0;
int secondSmallest = 0;
int thirdSmallest = 0;
for(int i=1;i<N;i++){
if(a[i] < a[min]){
min = i;
}else if(a[i] < a[secondSmallest]){
secondSmallest = i;
}else if(a[i]< a[thirdSmallest]){
thirdSmallest = i;
}
}
return a[thirdSmallest];
}
public static void main(String[] args) {
int[] a = new int[]{4,2,3,1,5};
System.out.println(findThirdSmallest(a));
}
}
>> 4