import java.util.Arrays;
import cn.hutool.core.util.ArrayUtil;
public class SortTest {
public static void main(String[] args) {
// int[] arr = {6,7,1,5,3,8,2,4};
int[] arr = { 5, 13, 14, 10, 9, 6, 8, 15, 4, 11, 2, 12, 7, 3, 1 };
System.out.println(ArrayUtil.toString(arr));
// jdk自带排序方法
// Arrays.sort(arr);
// sort(arr);
quickSort(arr, 0, arr.length - 1);
System.out.println(ArrayUtil.toString(arr));
int index = halfSelect(arr, 10);
System.out.println("index :" + index);
}
// 冒泡排序
public static void 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;
}
}
System.out.println(ArrayUtil.toString(arr));
}
}
// 快速排序
public static void quickSort(int[] arr, int start, int end) {
if (start >= end) {
return;
}
// 先定义一个基准值,一般都用数组起始位
int base = arr[start];
int left = start;
int right = end;
while (left < right) {
// 从右往左找比基准小的
while (base <= arr[right] && left < right) {
right--;
}
// 从左往右找比基准大的,小的跳过
while (base >= arr[left] && left < right) {
left++;
}
if (left < right) {
int temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
} else if (left == right) {
// 相遇的位置与基准位换位
arr[start] = arr[left];
arr[left] = base;
}
}
// 左半部分数据递归调用quickSort
quickSort(arr, start, right - 1);
// 右半部分数据归调用quickSort
quickSort(arr, right + 1, end);
}
// 二分法查找,前提是输入的数组是有序的
public static int halfSelect(int[] arr, int num) {
// TODO
int index = -1;
int start = 0;
int end = arr.length - 1;
while (start <= end) {
int mid = (start + end) / 2;
if (num == arr[mid]) {
index = mid;
break;
} else if (num > arr[mid]) {
start = mid + 1;
} else {
end = mid - 1;
}
}
return index;
}
}
Java笔记-冒泡排序/快速排序/二分法查找
于 2022-05-30 00:46:32 首次发布