题解 | #输入整型数组和排序标识按升序或降序进行排序#
https://www.nowcoder.com/practice/dd0c6b26c9e541f5b935047ff4156309
排序方法使用插入排序法,重点在于判断排序要求是升序还是降序
插入排序的循环中,单层循环的结束条件分别是:
升序:values[j]>=values[j-1]
降序:values[j]<=values[j-1]
我们把升序降序用一个boolean值表示,即flag,false代表升序,true代表降序
!(values[j]>=values[j-1])==flag易验证,不论是要求升序或者降序,当j和j-1已经满足排序要求时,该表达式为真,即可结束单层循环。
import java.util.Scanner; public class Main { public static void main(String... args) { Scanner in = new Scanner(System.in); int count=in.nextInt(); int []values=new int[count]; for(int i=0;i<count;i++) values[i]=in.nextInt(); boolean flag=in.nextInt()==0?false:true; sort(flag,values); for(int i=0;i<count;i++) System.out.print(values[i]+" "); } public static void sort(boolean flag,int []values){//flag,false代表升序,true代表降序 for(int i=1;i<values.length;i++){ for(int j=i;j>0;j--){ if(!(values[j]>=values[j-1])==flag)//此处是判断升序or降序的重点 break; int t=values[j]; values[j]=values[j-1]; values[j-1]=t; } } } }