使用Java函数实现排序算法(快速排序、归并排序等)
发布时间:2023-07-06 11:23:19
排序算法是计算机科学中非常基础而重要的算法之一,它的作用是将一组无序的数据按照某个特定的顺序进行排列。常见的排序算法有快速排序、归并排序、冒泡排序等。在Java中,我们可以使用函数来实现这些排序算法。
1. 快速排序(quick sort)是一种分治法的排序算法,它的基本思想是通过一轮的排序将数组按照一个基准数分成两部分,一部分小于等于基准数,一部分大于基准数,然后再对这两部分分别进行快速排序。
public class QuickSort {
public static void quickSort(int[] arr, int low, int high) {
if (low < high) {
int pivotIndex = partition(arr, low, high); // 划分数组
quickSort(arr, low, pivotIndex - 1); // 对左子数组进行快速排序
quickSort(arr, pivotIndex + 1, high); // 对右子数组进行快速排序
}
}
private static int partition(int[] arr, int low, int high) {
int pivot = arr[low]; // 使用 个元素作为基准数
while (low < high) {
while (low < high && arr[high] >= pivot) {
high--;
}
arr[low] = arr[high]; // 将小于基准数的元素移到低端
while (low < high && arr[low] <= pivot) {
low++;
}
arr[high] = arr[low]; // 将大于基准数的元素移到高端
}
arr[low] = pivot; // 将基准数放入最终位置
return low; // 返回基准数的位置
}
}
2. 归并排序(merge sort)是一种分治法的排序算法,它的基本思想是将数组分成两个子数组,分别进行排序,然后再将两个已排序的子数组合并成一个有序的数组。
public class MergeSort {
public static void mergeSort(int[] arr, int left, int right) {
if (left < right) {
int mid = (left + right) / 2; // 找到数组的中间位置
mergeSort(arr, left, mid); // 对左边子数组进行归并排序
mergeSort(arr, mid + 1, right); // 对右边子数组进行归并排序
merge(arr, left, mid, right); // 合并两个已排序的子数组
}
}
private static void merge(int[] arr, int left, int mid, int right) {
int[] temp = new int[right - left + 1]; // 创建一个临时数组,用于存放排序后的结果
int i = left; // 左子数组的起始位置
int j = mid + 1; // 右子数组的起始位置
int k = 0; // 临时数组的起始位置
while (i <= mid && j <= right) {
if (arr[i] <= arr[j]) {
temp[k++] = arr[i++]; // 从左子数组中取较小的元素放入临时数组
} else {
temp[k++] = arr[j++]; // 从右子数组中取较小的元素放入临时数组
}
}
while (i <= mid) {
temp[k++] = arr[i++]; // 将左子数组中剩余的元素放入临时数组
}
while (j <= right) {
temp[k++] = arr[j++]; // 将右子数组中剩余的元素放入临时数组
}
for (int m = 0; m < temp.length; m++) {
arr[left + m] = temp[m]; // 将临时数组中的元素拷贝回原数组
}
}
}
以上是使用Java函数实现快速排序和归并排序的代码。这两个排序算法分别可以通过调用 quickSort 和 mergeSort 函数来实现。排序的过程是通过递归的方式不断地对子数组进行排序,最终得到整个数组的有序序列。使用这些排序函数可以对一个整型数组进行排序,从而使得数组中的元素按照递增或递减的顺序排列。
