一、时间复杂度的三种排序方法
1.1 选择排序
//选择排序
public static void selectionSort(int[] arr) {
if(arr == null || arr.length < 2)
return;
for(int i = 0; i < arr.length - 1; i++) {
int minIndex = i;
for(int j = i + 1; j < arr.length; j++) {
minIndex = arr[j] < arr[minIndex] ? j : minIndex;
}
swap(arr, i, minIndex);
}
}
1.2 冒泡排序
//冒泡排序
public static void bubbleSort(int[] arr) {
if(arr == null || arr.length < 2)
return;
for(int e = arr.length - 1; e > 0; e--) {
for(int i = 0; i < e; i++) {
if(arr[i] > arr[i+1])
swap(arr, i, i+1);
}
}
}
1.3 插入排序
//插入排序
public static void insertSort(int[] arr) {
if(arr == null || arr.length < 2)
return;
for(int e = 1; e < arr.length; e++) {
for(int i = e; i > 0 && arr[i-1] > arr[i]; i--)
swap(arr, i-1, i);
}
}
附:swap的两种方法
//swap方法一
public static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
//swap方法二
public static void swap(int[] arr, int i, int j) {
arr[i] = arr[i] ^ arr[j];
arr[j] = arr[i] ^ arr[j];
arr[i] = arr[i] ^ arr[j];
}