冒泡排序
算法思路
在一组待排数据,从上到下比较和调整两个相邻的数据,大的往下沉小的往上冒。(a[i]和a[i+1]比较,如果a[i]>a[i+1],交换数据,继续比较a[i+1]和a[i+2])
算法图解
1.原始数据
2.比较3和4,不交换
3.比较4和1,交换
4.比较4和2,交换
5.从头再遍历一遍,最后一位已经最大不再遍历
代码详解
public static int[] sort(int[] arr) {
int length = arr.length;
for (int i = 0; i < length - 1; i++) {
for (int j = 0; j < length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
return arr;
}
快速排序
算法思路
在数据中取一个基准值(一般取第一个),将剩余数据与之比较且分为两部分,一部分大于等于基准值,另一部分小于基准值,再按照这个方法将这两部分进行递归排序。
算法图解
代码详解
private static int getMiddle(int[] arr, int low, int high) {
int temp = arr[low];
while (low < high) {
while (low < high && arr[high] >= temp) {
high--;
}
arr[low] = arr[high];
while (low < high && arr[low] <= temp) {
low++;
}
arr[high] = arr[low];
}
arr[low] = temp;
return low;
}
private static int[] quickSort(int[] arr, int low, int high) {
if (low < high) {
int middle = getMiddle(arr, low, high);
quickSort(arr, low, middle - 1);
quickSort(arr, middle + 1, high);
}
return arr;
}