# java排序算法：快速排序、归并排序、堆排序等

Java中的快速排序（QuickSort）、归并排序（Merge Sort）和堆排序（Heap Sort）是三种常用的排序算法，它们各有优缺点。以下是这些排序算法的简单介绍以及在Java中实现的示例。

### 快速排序

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[high];
int i = low - 1;

for (int j = low; j < high; j++) {

if (arr[j] <= pivot) {

i++;
swap(arr, i, j);
}
}
swap(arr, i + 1, high);
return i + 1;
}

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

int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}


### 归并排序

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++];
}

System.arraycopy(temp, 0, arr, left, temp.length);
}
}


### 堆排序

public class HeapSort {

public static void heapify(int[] arr, int n, int i) {

int largest = i;
int left = 2 * i + 1;
int right = 2 * i + 2;

if (left < n && arr[left] > arr[largest]) {

largest = left;
}

if (right < n && arr[right] > arr[largest]) {

largest = right;
}

if (largest != i) {

swap(arr, i, largest);
heapify(arr, n, largest);
}
}

public static void heapSort(int[] arr) {

int n = arr.length;

// 构建初始的大顶堆
for (int i = n / 2 - 1; i >= 0; i--) {

heapify(arr, n, i);
}

// 交换堆顶元素和末尾元素，然后重新调整堆结构
for (int i = n - 1; i > 0; i--) {

swap(arr, 0, i);
heapify(arr, i, 0);
}
}

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

int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}


|
1天前
|

6 0
|
1天前
|

【数据结构与算法】1、学习动态数组数据结构（基本模拟实现 Java 的 ArrayList 实现增删改查）
【数据结构与算法】1、学习动态数组数据结构（基本模拟实现 Java 的 ArrayList 实现增删改查）
5 0
|
1天前
|

python实现归并排序算法。
【2月更文挑战第9天】【2月更文挑战第24篇】python实现归并排序算法。
6 2
|
1天前
|

python实现快速排序算法。
【2月更文挑战第9天】【2月更文挑战第23篇】python实现快速排序算法。
7 0
|
3天前
|

【数据结构排序算法篇】----堆排序【实战演练】
【数据结构排序算法篇】----堆排序【实战演练】
8 2
|
3天前
|

【数据结构排序算法篇】----快速排序【实战演练】
【数据结构排序算法篇】----快速排序【实战演练】
20 2
|
3天前
|

【数据结构排序算法篇】----归并排序【实战演练】
【数据结构排序算法篇】----归并排序【实战演练】
8 0
|
3天前
|

25 1
|
4天前
|

【国密算法】国密算法在Java中的实践
【国密算法】国密算法在Java中的实践
15 1
|
4天前
|

15 1

• 机器翻译
• 工业大脑

更多

更多

更多