常用的排序方法有8种
1. 冒泡排序
1.针对一个整型数组从小到大排序
//method1
import java.util.Arrays;
public class main{
public static void main(String[] args) {
int [] ns = {34,7,90,67,23,85,18,7,20};
//Arrays.sort(ns);
//java中有使用JDK提供的Arrays.sort()也可以进行排序
System.out.println(Arrays.toString(ns));//排序前;使用sort的话这里就是排序后的结果
for (int i = 0; i < ns.length - 1; i++) {
for (int j = 0; j < ns.length - i - 1; j++) {
if (ns[j] > ns[j+1]) {
// 交换ns[j]和ns[j+1]:
int tmp = ns[j];
ns[j] = ns[j+1];
ns[j+1] = tmp;
}
System.out.println(Arrays.toString(ns));//排序后
}
}
}
往往地,存在排序好的数组多次重复排序,知道冒泡排序结束,会造成冗余量的问题,那么如何解决呢?
定义一个标志量就可以了。默认值为int flag = 0;
,乱序时改变flag的值就可以了。
//method2
import java.util.Arrays;
public class Bubble {
public static void sort(Comparable[] a) {
int flag = 0;
for (int i = a.length - 1; i > 0; i--) {//确定参与排序的元素,i>0至少有一个元素参与排序
for (int j = 0; j < i; j++) {//需要比较的元素
if (biggerOne ( a[j], a[j + 1] )) {//比较索引j,j+1元素大小
exch ( a, j, j + 1 );
flag = -1;//非有序,flag设置为-1
}
}
if (flag==0){
return;
}
}
}
//判断哪个大
public static boolean biggerOne(Comparable v, Comparable w) {
return v.compareTo ( w ) > 0;
}
//swap
public static void exch(Comparable[] a, int i, int j) {
Comparable temp;
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
//测试类
public static void main(String[] args) {
Integer[] arr = {2,1,3,5,6,4};
Bubble.sort ( arr );
System.out.println ( Arrays.toString ( arr ) );
}
}