Java 实现四种排序算法:冒泡排序、选择排序、插入排序和合并排序
本文使用 Java 语言实现四种经典排序算法:冒泡排序、选择排序、插入排序和自底向上的合并排序,并提供伪代码解释。示例代码包含注释,方便理解算法实现细节。
- 冒泡排序
// 冒泡排序
public static void bubbleSort(double[] arr) {
int n = arr.length;
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
// 交换 arr[j] 和 arr[j+1]
double temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
- 选择排序
// 选择排序
public static void selectionSort(double[] arr) {
int n = arr.length;
for (int i = 0; i < n - 1; i++) {
int minIndex = i;
for (int j = i + 1; j < n; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
// 将最小元素与当前位置交换
double temp = arr[minIndex];
arr[minIndex] = arr[i];
arr[i] = temp;
}
}
- 插入排序
// 插入排序
public static void insertionSort(double[] arr) {
int n = arr.length;
for (int i = 1; i < n; i++) {
double key = arr[i];
int j = i - 1;
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = key;
}
}
- 自底向上的合并排序
// 合并排序
public static void mergeSort(double[] arr) {
int n = arr.length;
double[] temp = new double[n];
for (int blockSize = 1; blockSize < n; blockSize *= 2) {
for (int start = 0; start < n; start += 2 * blockSize) {
int mid = start + blockSize - 1;
int end = Math.min(start + 2 * blockSize - 1, n - 1);
merge(arr, temp, start, mid, end);
}
}
}
// 合并两个子数组
public static void merge(double[] arr, double[] temp, int start, int mid, int end) {
int left = start;
int right = mid + 1;
int index = start;
// 比较左右两个子数组的元素,将较小的元素放入临时数组中
while (left <= mid && right <= end) {
if (arr[left] <= arr[right]) {
temp[index++] = arr[left++];
} else {
temp[index++] = arr[right++];
}
}
// 将剩余的元素放入临时数组中
while (left <= mid) {
temp[index++] = arr[left++];
}
while (right <= end) {
temp[index++] = arr[right++];
}
// 将临时数组中排序好的元素复制回原数组
for (int i = start; i <= end; i++) {
arr[i] = temp[i];
}
}
以上是四种排序算法的 Java 代码实现,欢迎参考。
原文地址: https://www.cveoy.top/t/topic/pcEd 著作权归作者所有。请勿转载和采集!