【知识分享】Java实现排序的方法及代码实现

Java实现排序的基础方法有很多,下面介绍几种比较常见的排序算法及其代码实现。

1.冒泡排序

冒泡排序是一种基础的排序算法,其思想是依次比较相邻的两个元素,如果顺序不对则交换它们的位置,直到整个数组都排好序为止。

代码实现:

public static void bubbleSort(int\[\] arr) {

int n = arr.length;

for (int i = 0; i < n - 1; i++) {

for (int j = 0; j < n - i - 1; j++) {

if (arrj > arrj + 1) {

int temp = arrj;

arrj = arrj + 1;

arrj + 1 = temp;

}

}

}

}

2.快速排序

快速排序是一种高效的排序算法,其基本思想是取一个基准元素,将小于它的元素放在左边,大于它的元素放在右边,再递归地对左右两部分进行排序。

代码实现:

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

if (left < right) {

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

quickSort(arr, left, pivot - 1);

quickSort(arr, pivot + 1, right);

}

}

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

int pivot = arrleft;

int i = left + 1;

int j = right;

while (i <= j) {

while (i <= j && arri < pivot) {

i++;

}

while (i <= j && arrj > pivot) {

j--;

}

if (i <= j) {

int temp = arri;

arri = arrj;

arrj = temp;

i++;

j--;

}

}

arrleft = arrj;

arrj = pivot;

return j;

}

3.插入排序

插入排序是一种简单的排序算法,其思想是将待排序元素逐个插入到已排序序列中的合适位置。

代码实现:

public static void insertSort(int\[\] arr) {

int n = arr.length;

for (int i = 1; i < n; i++) {

int key = arri;

int j = i - 1;

while (j >= 0 && arrj > key) {

arrj + 1 = arrj;

j--;

}

arrj + 1 = key;

}

}

4.选择排序

选择排序是一种简单的排序算法,其思想是每次从未排序的元素中选择最小(或最大)的元素,放到已排序序列的末尾。

代码实现:

public static void selectSort(int\[\] 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 (arrj < arrminIndex) {

minIndex = j;

}

}

int temp = arri;

arri = arrminIndex;

arrminIndex = temp;

}

}

5.归并排序

归并排序是一种高效的排序算法,其基本思想是将待排序序列分成两个子序列,分别排序后再将其合并成一个有序序列。

代码实现:

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 intright - left + 1; // 临时数组

int i = left; // 左序列指针

int j = mid + 1; // 右序列指针

int k = 0; // 临时数组指针

while (i <= mid && j <= right) {

if (arri <= arrj) {

tempk++ = arri++;

} else {

tempk++ = arrj++;

}

}

while (i <= mid) {

tempk++ = arri++;

}

while (j <= right) {

tempk++ = arrj++;

}

// 将临时数组中的元素复制到原数组中

for (int m = 0; m < temp.length; m++) {

arrleft + m = tempm;

}

}

6.堆排序

堆排序是一种利用堆的数据结构进行排序的算法,其基本思想是将待排序序列构造成一个大/小根堆,然后每次将堆顶元素(最大/最小值)放到已排序序列的末尾。

代码实现:

public static void heapSort(int\[\] arr) {

int n = arr.length;

// 构造大根堆

for (int i = n / 2 - 1; i >= 0; i--) {

adjustHeap(arr, i, n);

}

// 排序

for (int i = n - 1; i > 0; i--) {

swap(arr, 0, i);

adjustHeap(arr, 0, i);

}

}

private static void adjustHeap(int\[\] arr, int i, int n) {

int temp = arri;

for (int j = i * 2 + 1; j < n; j = j * 2 + 1) {

if (j + 1 < n && arrj < arrj + 1) {

j++;

}

if (arrj > temp) {

arri = arrj;

i = j;

} else {

break;

}

}

arri = temp;

}

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

int temp = arri;

arri = arrj;

arrj = temp;

}

7.二分法排序

二分法排序,也称为折半插入排序,是一种基于插入排序的改进算法。其基本思想是将待排序序列分为已排序和未排序两部分,在已排序序列中使用二分查找找到插入位置,然后将元素插入到已排序序列的正确位置。

public static void binaryInsertionSort(int\[\] arr) {

int n = arr.length;

for (int i = 1; i < n; i++) {

int target = arri;

int left = 0;

int right = i - 1;

// 使用二分查找找到插入位置

while (left <= right) {

int mid = (left + right) / 2;

if (target < arrmid) {

right = mid - 1;

} else {

left = mid + 1;

}

}

// 将大于target的元素都向后移动一位

for (int j = i - 1; j >= left; j--) {

arrj + 1 = arrj;

}

arrleft = target; // 插入元素到正确位置

}

}

相关推荐
JieE2123 小时前
LeetCode 101. 对称二叉树|JS 递归 + 迭代双解法,彻底搞懂镜像判断
javascript·算法
nanxun8868 小时前
记一次诡异的 Docker 容器"串包"故障排查
java
用户15630681035110 小时前
Day01 | Java 基础(Java SE)
java
行者全栈架构师12 小时前
Maven dependency:tree 的 8 个高级用法
java·后端
行者全栈架构师16 小时前
IDEA 中 Maven 项目的 15 个红色报错快速解决方法
java·后端
令人头秃的代码0_016 小时前
mac(m5)平台编译openjdk
java
JieE2121 天前
LeetCode 56. 合并区间|超清晰 JS 图解思路,面试高频区间题
javascript·算法·面试
Jack201 天前
HarmonyOS开发中错误处理策略:网络异常统一处理
算法
小小杨树1 天前
读懂色彩:拍照调色不再难
算法·计算机视觉·配色
唐青枫2 天前
Java JDBC 实战指南:从 Connection 到事务和连接池
java