【知识分享】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; // 插入元素到正确位置

}

}

相关推荐
Feynman’s boom7 小时前
PDF解析复盘
数据库·人工智能·算法·pdf解析
luteres7 小时前
Mybatis+SSM整合笔记
java·开发语言·mybatis
郝学胜-神的一滴8 小时前
《C++11 工程级应用01:告别冗长类型,开启简洁高效编码新时代》深度解读
开发语言·c++·算法·软件开发·系统设计
学习中.........9 小时前
Transformer 训练资源估算:以 CS336 GPT-2 XL 配置为例
人工智能·python·算法·机器学习·自然语言处理
kkkkkkkkkk_Z14 小时前
学嵌入式和C语言编程数据结构|学习日记Day22:栈,二叉树,哈希存储
c语言·数据结构·学习
覆东流14 小时前
7.Java数组
java·开发语言·后端
m0_7190841114 小时前
限流和获取请求ip的方法
java
Navigator_Z14 小时前
LeetCode //C - 1206. Design Skiplist
c语言·算法·leetcode
码行山野赴时序归途14 小时前
三道经典数组题:从暴力到最优的算法思维
c语言·开发语言·数据结构·算法·leetcode
lzhdim14 小时前
提高 SQL 语句执行速度的方法
java·开发语言·数据库·sql·oracle