两种排序:bubblesort、selectsort。
时间复杂度:O(N2)
时间复杂度:只要高阶项,不要低阶项,不要高阶常数项。常数操作。
package JAVA_review;
import java.util.Arrays;
public class somesort {
//selectsort bubblesort
public static void bubblesort(int[] arr){
//选出最大放在最右边
for(int i = arr.length - 1;i>=0;i--){
for(int j = 0;j<i;j++){
if(arr[j] > arr[j+1]){
swap1(arr, j, j+1);
}
}
}
}
public static void selectsort(int[] arr){
//选出最小放在最左边
for(int i = 0;i<arr.length;i++){
int minindex = i;
for(int j = i;j<arr.length;j++){
if(arr[j] < arr[minindex]){
minindex = j;
}
}
swap1(arr, i, minindex);
}
}
//传统swap
public static void swap1(int[] arr,int i,int j){
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
//投机取巧swap
public static void swap2(int[] arr,int i,int j){
arr[i] = arr[i]^arr[j];
arr[j] = arr[i]^arr[j];
arr[i] = arr[i]^arr[j];
}
public static void comparator(int[] arr){
Arrays.sort(arr);
}
public static void main(String[] args){
int[] arr = {3,5,3,2,2,3,5,6};
comparator(arr);
System.out.println(Arrays.toString(arr));
bubblesort(arr);
System.out.println(Arrays.toString(arr));
selectsort(arr);
System.out.println(Arrays.toString(arr));
}
}
swap1:常规交换方式,需要额外的内存空间存储tmp。
swap2:使用异或(无进位相加)实现交换,不需要额外的内存空间,投机取巧,前提是交换的两个数不能在同一块内存空间,不然会被抹成0!