编写一个程序,将5个数字读入数组,并在该数组中打印最大数字和第2个数字及其位置。
import static java.lang.System.*;
import java.util.*;
public class bubble sort
{
public static void main(String[] args)
{
int i,j,temp;
Scanner input = new Scanner(in);
int array[]=new int [5];
for(i=0;i<array.length;i++)
{
out.println("please input an integer");
array[i]=input.nextInt();
}
for(i=0;i<array.length;i++)
{
for(j=0;j<array.length;j++)
{
if(array[i]>array[j])
{
temp=array[i];
array[i]=array[j];
array[j]=temp;
}
}
}
out.print(array[0]+" is the largest number");
out.println(array[1]+" is the 2nd largest number");
}
}
现在打印他们的位置我必须遵循另一种排序方法吗?或者是否可以使用冒泡分类?
答案 0 :(得分:0)
你排序了,所以你知道位置是零和一。
这看起来像是家庭作业,我想知道你是否误解了所要求的内容。 (也许在我的结尾有一个误解。)如果是家庭作业,请让老师澄清。
尝试找到最大和第二大,以及它们在原始数组中的位置而不进行排序。
答案 1 :(得分:0)
位置[0]和[1]将存储最小的数字。否则,您正在寻找反向冒泡排序,而不是您的代码。
现在,如果我得到你的问题,你可以创建两个数组。一个用于数字,一个用于索引。您对数组进行排序以查找数字数组,但对索引应用相同的更改。因此,最后您将对两个数组进行排序,并且可以简单地显示每个数组的位置[4]和[3](不是一个好的性能方法):
import static java.lang.System.*;
import java.util.*;
public class bubble sort
{
public static void main(String[] args)
{
int i,j,temp;
Scanner input = new Scanner(in);
int number_array[]=new int [5];
int index_array[5] = {0, 1, 2, 3, 4};
for(i=0;i<number_array.length;i++)
{
out.println("please input an integer");
number_array[i]=input.nextInt();
}
for(i=0;i<number_array.length;i++)
{
for(j=0;j<number_array.length;j++)
{
if(number_array[i]>number_array[j])
{
temp=number_array[i];
number_array[i]=number_array[j];
number_array[j]=temp;
temp=index_array[i];
index_array[i]=index_array[j];
index_array[j]=temp;
}
}
}
out.print(number_array[4]+" is the largest number with initial index "+index_array[4]);
out.println(number_array[3]+" is the 2nd largest number with initial index "+index_array[3]);
}
}
希望它有所帮助,
答案 2 :(得分:0)
在空间复杂性和时间复杂性方面,最有效的方法是使用哈希表(即地图和字典)将值映射到其初始索引。