代码:
import java.util.Scanner;
public class Sorting0{
public int[] sort(int[] num){
for(int i=0;i<num.length;i++){
for(int j=0;j<num.length-i-1;j++){
if(num[j]<num[j+1]){
int n=0;
n=num[j];
num[j]=num[j+1];
num[j+1]=n;
}
}
}
return num;
}
public static void main(String[] args){
Scanner input=new Scanner(System.in);
int k=input.nextInt();
Sorting0 s=new Sorting0();
int[] num=new int[100];
for(int i=0;i<k;i++){
num[i]=input.nextInt();
}
s.sort(num);
while(input.hasNext()){
if(input.nextInt()>num[k-1]){
if(input.nextInt()>num[k-2]){
num[k-1]=num[k-2];
}
else{
num[k-1]=input.nextInt();
}
}
}
System.out.println(num[k-1]);
}
}
嗷呜求大神帮看看代码,不造哪里不对了
import java.util.Scanner;
public class Sorting0{
public int[] sort(int[] num){
for(int i=0;i<num.length;i++){
for(int j=0;j<num.length-i-1;j++){
if(num[j]<num[j+1]){
int n=0;
n=num[j];
num[j]=num[j+1];
num[j+1]=n;
}
}
}
return num;
}
public static void main(String[] args){
Scanner input=new Scanner(System.in);
int k=input.nextInt();
Sorting0 s=new Sorting0();
int[] num=new int[100];
for(int i=0;i<k;i++){
num[i]=input.nextInt();
}
s.sort(num);
while(input.hasNext()){
if(input.nextInt()>num[k-1]){
if(input.nextInt()>num[k-2]){
num[k-1]=num[k-2];
}
else{
num[k-1]=input.nextInt();
}
}
}
System.out.println(num[k-1]);
}
}
嗷呜求大神帮看看代码,不造哪里不对了
特别是你的while循环体和if中执行的代码.import java.util.Scanner;
import java.util.Comparator;
import java.util.ArrayList;
public class Test implements Comparator<Integer>{
public static void main(String[] args){
Scanner keyboard = new Scanner(System.in);
ArrayList<Integer> nums = new ArrayList<>();
System.out.print("请输入要存储的数字总个数:");
int count = keyboard.nextInt();
for(int i = 1 ; i<= count ; i ++){
System.out.print(String.format("请输入第%d个数值:",i));
nums.add(keyboard.nextInt());
} nums.sort(new Test()); System.out.print("请输入要查询的倒数第几位:");
int index_D = keyboard.nextInt();
assert index_D > 0;
int index = 0;
if(index_D <= nums.size()){
index = nums.size() - index_D;
} System.out.println(String.format("倒数第%d位是%d.",index_D,nums.get(index))); } public int compare(Integer i1,Integer i2){
return i1.compareTo(i2);
}
}
楼主排序算法问题不大,但是main方法中对后续输入的数据的处理出现问题。主要在while的循环体中。修改后代码是:import java.util.Arrays;
import java.util.Scanner;public class Sorting0 {
public static void sort(int[] array) {
int temp;
int j;
for (int i = 1; i < array.length; i++) {
temp = array[i];
for (j = i - 1; j >= 0 && array[j] < temp; j--) {
array[j + 1] = array[j];
}
array[j + 1] = temp;
}
} public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("请输入k的值:");
int k = in.nextInt();
int[] num = new int[k];
System.out.println("请输入数字初始值:");
for (int i = 0; i < k; i++) {
num[i] = in.nextInt();
}
System.out.println("原始序列:" + Arrays.toString(num));
sort(num);
System.out.println("排序后:" + Arrays.toString(num));
System.out.println("第k个最大值:" + num[k - 1]); int j;
int temp;
while (in.hasNext()) {
temp = in.nextInt();
System.out.println("输入值:" + temp); if (num[k - 1] < temp) {
for (j = k - 2; j >= 0 && num[j] < temp; j--) {
num[j + 1] = num[j];
}
num[j + 1] = temp;
} System.out.println("排序后:" + Arrays.toString(num));
System.out.println("第k个最大值:" + num[k - 1]);
}
in.close();
}
}
维持一个容量为k的小根堆,对所有元素执行一遍入堆,最后顶点就是第k大元素。效率为O(nlogk)。
对所有元素的集合进行排序的效率为O(nlogn)。
维持一个容量为k的小根堆,对所有元素执行一遍入堆,最后顶点就是第k大元素。效率为O(nlogk)。
对所有元素的集合进行排序的效率为O(nlogn)。sort 方法使用的是快速排序算法,效率不应该会有太大问题,当然它会有一定代价,看你如何取舍当然,如果你的系统里需要进行排序的量非常大的话,应该多考虑一下如何减少排序次数,以及如何维护这个有序队列,而不是经常性地排序