首先,了解一下算法的时间复杂度:
忽略常数,忽略低次项,忽略系数。
冒泡排序:
import java.util.Arrays;
public class bubbleSort {
public static void main(String[] args) {
long l = System.currentTimeMillis();
int[] arr =new int[80000];
for (int i = 0; i < 80000; i++) {
arr[i] = (int) (Math.random() * 80000);
}
int temp=0;
boolean ifChange=false;
for (int i = 0; i < arr.length-1; i++) {
for (int j = 0; j < arr.length-1-i; j++) {
if (arr[j]>arr[j+1]) {
ifChange=true;
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
if (!ifChange){
break;
}
}
long l1 = System.currentTimeMillis();
System.out.println(l1-l);
System.out.println(Arrays.toString(arr));
}
}
比较相邻元素,如果逆序则两者交换,否则就继续向前推进。从最后一位,即最大或最小数,逐渐放置其正确位置。
选择排序:
每次取出最大或最小值,遍历判断之后再进行放置。不同于冒泡比较两个。
import java.util.Arrays;
import java.util.Scanner;
public class SelectSort {
static int[] arr ;
static int maxSize;
static boolean flag;
public static void main(String[] args) {
Scanner scanner= new Scanner(System.in);
maxSize = scanner.nextInt();
arr=new int[maxSize];
for (int i = 0; i < maxSize; i++) {
arr[i]=scanner.nextInt();
}
for (int i = 0; i < maxSize; i++) {
flag=false;
findMinAndSwap(i);
if (!flag){
break;
}
}
System.out.println(Arrays.toString(arr));
}
public static void findMinAndSwap(int n){
for (int i = n+1; i <maxSize ; i++) {
if (arr[n]>arr[i]){
flag=true;
int temp=0;
temp=arr[i];
arr[i]=arr[n];
arr[n]=temp;
}
}
}
}