admin 管理员组

文章数量: 887042


2024年1月11日发(作者:sqlserver只能下载到c盘吗)

Java 数组排序算法详解

Java 数组排序算法是 Java 语言中一个重要的组成部分,是进行数据排序的重要工具。Java 提供了多种数组排序算法,包括快速排序、归并排序、堆排序等。本文将对 Java 数组排序算法进行详细介绍,并针对不同的算法提供具体的实现代码。

一、快速排序

快速排序是一种常用的排序算法,它采用分治的思想,通过递归地将数组划分为较小和较大的两个子数组,然后递归地排序两个子数组。快速排序是不稳定的排序算法,其平均时间复杂度为 O(nlogn)。

快速排序的实现代码如下:

```java

public static void quickSort(int[] arr, int left, int right)

{

if (left < right) {

int pivotIndex = partition(arr, left, right);

quickSort(arr, left, pivotIndex - 1);

quickSort(arr, pivotIndex + 1, right);

}

}

private static int partition(int[] arr, int left, int right)

{

int pivot = arr[left];

int i = left + 1;

int j = right;

while (i <= j) {

while (i <= j && arr[i] < pivot) {

i++;

}

while (i <= j && arr[j] > pivot) {

j--;

}

if (i <= j) {

swap(arr, i, j);

i++;

j--;

}

}

swap(arr, left, j);

return j;

}

private static void swap(int[] arr, int i, int j) {

int temp = arr[i];

arr[i] = arr[j];

arr[j] = temp;

}

```

二、归并排序

归并排序是一种高效的排序算法,它采用分治的思想,将数组划分为较小和较大的两个子数组,然后递归地排序两个子数组。归并排序是稳定的排序算法,其平均时间复杂度为 O(nlogn)。

归并排序的实现代码如下:

```java

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 n1 = mid - left + 1;

int n2 = right - mid;

int[] L = new int[n1];

int[] R = new int[n2];

for (int i = 0; i < n1; i++) {

L[i] = arr[left + i];

}

for (int j = 0; j < n2; j++) {

R[j] = arr[mid + 1 + j];

}

int i = 0;

int j = 0;

int k = left;

while (i < n1 && j < n2) {

if (L[i] <= R[j]) {

arr[k] = L[i];

i++;

} else {

arr[k] = R[j];

j++;

}

k++;

}

while (i < n1) {

arr[k] = L[i];

i++;

k++;

}

while (j < n2) {

arr[k] = R[j];

j++;

k++;

}

}

```

三、堆排序

堆排序是一种基于二叉堆的排序算法,它采用递归地建立大根堆和小根堆,然后将堆顶元素和堆底元素交换,然后再把剩余的元素重新调整为堆。堆排序是不稳定的排序算法,其平均时间复杂度为

O(nlogn)。


本文标签: 排序 算法 数组