简单排序
时间复杂度为O(n^2)的排序算法
冒泡排序
public class BubbleSort implements ISort {
@Override
public void sort(int[] arr) {
if (arr == null || arr.length <= 1) {
return;
}
//这里边界只需要循环n-1次即可
for (int i = 0; i < arr.length - 1; i++) {
//减少不必要的循环次数
boolean swapFlag = false;
for (int j = 0; j < arr.length - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
Util.swap(arr, j, j + 1);
swapFlag = true;
}
}
if (!swapFlag) {
break;
}
}
}
}
插入排序
public class InsertSort implements ISort {
@Override
public void sort(int[] arr) {
if (arr == null || arr.length <= 1) {
return;
}
for (int i = 1; i < arr.length; i++) {
int t = arr[i];
int j;
for (j = i - 1; j >= 0; j--) {
//升序
if (arr[j] > t) {
arr[j + 1] = arr[j];
} else {
break;
}
}
//此时 arr[j] 为第一个小于 t 的位置,或者为-1
arr[j+1] = t;
}
}
}
选择排序
以第一个元素为初始值,在后面的所有元素中找到最小值,如果这个值比初始值还小,那么就交互两个元素位置。依次类推,直到最后。
public class SelectSort implements ISort {
@Override
public void sort(int[] arr) {
if (arr == null || arr.length <= 1) {
return;
}
for (int i = 0; i < arr.length - 1; i++) {
int min = arr[i];
int minIndex = i;
for (int j = i + 1; j < arr.length; j++) {
if (arr[j] < min) {
min = arr[j];
minIndex = j;
}
}
if (i != minIndex) {
Util.swap(arr, i, minIndex);
}
}
}
}
最后更新于
这有帮助吗?