--------------------------------------------------------------------------------------------------------
这道题是对排序的考察
--------------------------------------------------------------------------------------------------------
Arrays数组也有sort方法(自动排序)
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] a = new int[n];
for(int i=0;i
a[i] = sc.nextInt();
Arrays.sort(a);
for(int i:a)
System.out.print(i+" ");
}
}
用容器的方法
import java.util.*;
public class Main {
public static void main(String[] args) {
List list = new ArrayList();
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
for(int i=0;i
list.add(sc.nextInt());
Collections.sort(list);
for(int i:list)
System.out.print(i+" ");
}
}
import java.util.*;
public class Main {
public static void main(String[] args) {
List list = new ArrayList();
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
for(int i=0;i
list.add(sc.nextInt());
Collections.sort(list,new Comparator() {
public int compare(Integer o1, Integer o2) {
if(o1
return 1;
else if(o1>o2)
return -1;
else
return 0;
}
});
for(int i:list)
System.out.print(i+" ");
}
}
算法一(冒泡排序)
相邻两个比较,把较大的往上替换循环往复,这样大的会像冒泡一样一个一个冒出来(滑稽0.0)
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] a = new int[n];
for(int i=0;i
a[i] = sc.nextInt();
//冒泡排序
for(int i=0;i
for(int k=0;k
if(a[k]>a[k+1]){
int tmp = a[k];
a[k] = a[k+1];
a[k+1] = tmp;
}
}
}
for (int i : a) {
System.out.print(i+" ");
}
}
}
算法二(选择排序)
每次循环找到最小的下标替换到前面去(有临时变量存下标,手动选择qaq)
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] a = new int[n];
for(int i=0;i
a[i] = sc.nextInt();
//选择排序
for(int k=0; k
int min = k;
for(int i=k+1; i
if(a[i] < a[min]) {
min = i;
}
}
if(k != min) {
int temp = a[k];
a[k] = a[min];
a[min] = temp;
}
}
for (int i : a) {
System.out.print(i+" ");
}
}
}
算法三(插入排序)
把前面部分看成插入区域,每次把后面一个数有选择的插入到前面去(如果小于前面的数,就把前面的数向后移,如果大于就直接替换)
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] a = new int[n];
for(int i=0;i
a[i] = sc.nextInt();
//插入排序
for(int i=1;i
int tmp = a[i];
for(int k=i-1;k>=0;k--){
if(a[k]>tmp){
a[k+1] = a[k];
a[k] = tmp;
}else
break;
}
}
for (int i : a) {
System.out.print(i+" ");
}
}
}
其他算法(临时写的)
算法一(类似插入排序,直接在获取数值的时候就排序)
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] a = new int[n];
//单排
for(int i=0;i
a[i] = sc.nextInt();
for(int j=0;j
if(a[i]
int tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
}
}
for (int i : a) {
System.out.print(i+" ");
}
}
}
算法二(冒泡和插入的结合怪胎,最开始没理解透插入算法就写了一个怪胎0.0)
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] a = new int[n];
//冒泡和插入的结合怪胎
for(int i=0;i
a[i] = sc.nextInt();
for(int i=1;i
for(int k=0;k
if(a[i]