排序算法
-
选择排序
时间复杂度 额外空间复杂度 稳定性 O( N 2 N^{2} N2) O(1) 无
/**
* 选择排序 O(n^2)
* @param arr
*/
public static void selctionSort(int [] arr) {
for (int i = 0;i < arr.length - 1; i++) {
int minIndex = i;
for (int j = i + 1;j < arr.length;j++) {
if (arr[minIndex] > arr[j]) {
minIndex = j;
}
}
if (i != minIndex) {
swap(arr,i,minIndex);
}
}
}
/**
* 交换两个数
* @param a
* @param b
*/
private static void swap (int[] arr,int a,int b) {
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
- 冒泡排序
时间复杂度 额外空间复杂度 稳定性 O( N 2 N^{2} N2) O(1) 有
/**
* 冒泡排序 O(n^2)
* @param arr
*/
public static void bubbleSort(int[] arr) {
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]) {
swap(arr, j,j+1);
}
}
}
}
/**
* 交换两个数
* @param a
* @param b
*/
private static void swap (int[] arr,int a,int b) {
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
- 插入排序
时间复杂度 额外空间复杂度 稳定性 O( N 2 N^{2} N2) O(1) 有
/**
* 插入排序 O(n^2)
* @param arr
*/
public static void insertSort(int[] arr) {
for (int i = 1;i < arr.length;i++) {
for (int j = i - 1;j >= 0 && arr[j] > arr[j+1];j--) {
swap(arr,j,j+1);
}
}
}
/**
* 交换两个数
* @param a
* @param b
*/
private static void swap (int[] arr,int a,int b) {
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}