java排序算法精讲

article/2025/10/24 15:59:59

排序算法

  • 概要
  • 一、冒泡排序
    • 概念
      • 实现步骤
    • 代码
  • 二、选择排序
    • 概念
      • 实现步骤
    • 代码
  • 三、插入排序
    • 概念
      • 实现步骤
    • 代码
  • 四、快速排序
    • 概念
      • 实现步骤
    • 代码
  • 五、归并排序
    • 概念
      • 实现步骤
    • 代码
  • 六、堆排序
    • 概念
      • 实现步骤
    • 代码
  • 总结
    • 以二维表表现出各个排序的关系

概要

    Java是一种面向对象的编程语言,广泛应用于各种软件开发领域。其中,排序算法是Java程序员必须熟练掌握的技能之一。排序是将一组无序的数据按照一定规则重新排列的过程,使其变成有序的数据。在Java中,有许多种排序算法可供使用,本文将详细介绍Java中的排序算法及其实现。

一、冒泡排序

概念

    冒泡排序是一种简单的排序算法。它的基本思想是将待排序的元素依次比较相邻的两个元素,如果前一个元素大于后一个元素,则交换它们的位置,直到整个序列都有序。冒泡排序的实现比较简单,但是当数据量较大时,效率较低。

实现步骤

  1. 从待排序的数列中,从第一个元素开始,依次比较相邻的两个元素,如果前面的元素比后面的元素大,则交换这两个元素的位置。
  2. 对数列中的每一对相邻元素进行比较,重复执行以上步骤,直到没有任何一对元素需要交换为止。
  3. 最终,数列中的所有元素按照从小到大的顺序排列。

代码

冒泡排序的Java代码实现如下:

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 (arr[j] > arr[j + 1]) {int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}
}

二、选择排序

概念

    选择排序是一种简单的排序算法。它的基本思想是每次从未排序的数据中选取最小(或最大)的数,将其放到已排序数据的末尾,直到整个序列都有序。选择排序的实现比冒泡排序稍微复杂一些,但是效率要高一些。

实现步骤

  1. 遍历整个序列,找到最小的元素。
  2. 将最小元素和序列的第一个元素交换位置。
  3. 在剩余的未排序序列中,继续执行步骤 1 和 2,直到序列有序。

代码

选择排序的Java代码实现如下:

public static void selectionSort(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 (arr[j] < arr[minIndex]) {minIndex = j;}}int temp = arr[minIndex];arr[minIndex] = arr[i];arr[i] = temp;}
}

三、插入排序

概念

    插入排序是一种简单的排序算法。它的基本思想是将待排序的元素依次插入到已排序的数据中,使其保持有序。插入排序的实现比选择排序稍微复杂一些,但是效率要高一些。

实现步骤

  1. 从第一个元素开始,该元素可以认为已经被排序
  2. 取出下一个元素,在已经排序的元素序列中从后向前扫描
  3. 如果该元素(已排序)大于新元素,将该元素移到下一位置
  4. 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
  5. 将新元素插入到该位置中
  6. 重复步骤2-5,直到排序完成

代码

插入排序的Java代码实现如下:

public static void insertionSort(int[] arr) {int n = arr.length;for (int i = 1; i < n; i++) {int key = arr[i];int j = i - 1;while (j >= 0 && arr[j] > key) {arr[j + 1] = arr[j];j--;}arr[j + 1] = key;}
}

四、快速排序

概念

    快速排序是一种高效的排序算法。它的基本思想是选取一个基准元素,将数组分成两个部分,其中一部分中的元素都小于基准元素,另一部分中的元素都大于基准元素。然后对这两个部分分别进行递归排序,最终将整个序列排好序。快速排序的实现比前面三种排序算法要复杂一些,但是效率要高很多。

实现步骤

  1. 选取一个基准元素,通常选择第一个元素或者最后一个元素。
  2. 将序列中的元素按照基准元素分为两部分,小于基准元素的放在左边,大于基准元素的放在右边。
  3. 对左右两部分递归地进行快速排序,直到序列不可再分。
  4. 合并左右两部分,得到最终的有序序列。

代码

快速排序的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);}
}public static int partition(int[] arr, int left, int right) {int pivot = arr[right];int i = left - 1;for (int j = left; j < right; j++) {if (arr[j] < pivot) {i++;int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}}int temp = arr[i + 1];arr[i + 1] = arr[right];arr[right] = temp;return i + 1;
}

五、归并排序

概念

    归并排序是一种高效的排序算法。它的基本思想是将待排序的序列分成两部分,分别对这两部分进行递归排序,最后将两个有序子序列合并成一个有序序列。归并排序的实现比前面四种排序算法要复杂一些,但是效率也很高。

实现步骤

  1. 将待排序数组从中间位置一分为二,分别对左半部分和右半部分进行递归排序,直到每个子数组只有一个元素为止。
  2. 将排好序的左半部分和右半部分合并起来。合并时,使用两个指针分别指向左半部分和右半部分的起始位置,比较两个指针所指向的元素大小,将较小的元素放入临时数组中,同时移动指针。当其中一个子数组的元素全部放入临时数组中后,将另一个子数组中剩余的元素依次放入临时数组中。
  3. 将临时数组中的元素复制回原数组的对应位置。

代码

归并排序的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);}
}public static void merge(int[] arr, int left, int mid, int right) {int[] temp = new int[right - left + 1];int i = left, j = mid + 1, 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 p = 0; p < temp.length; p++) {arr[left + p] = temp[p];}
}

六、堆排序

概念

    堆排序是一种高效的排序算法。它的基本思想是将待排序的序列构建成一个堆,然后依次将堆顶元素取出并调整堆,直到整个序列都有序。堆排序的实现比前面的排序算法要复杂一些,但是效率也很高。

实现步骤

  1. 将待排序的序列构建成一个大根堆(或小根堆),即每个节点的值都大于(或小于)其左右子节点的值。
  2. 取出堆顶元素(最大值或最小值),将其与堆的最后一个元素交换位置,然后将堆的大小减一。
  3. 对新的堆顶元素进行堆调整,使其重新成为一个大根堆(或小根堆)。
  4. 重复步骤 2 和步骤 3 直到堆的大小为 1,此时排序完成。

代码

堆排序的Java代码实现如下:

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--) {int temp = arr[0];arr[0] = arr[i];arr[i] = temp;heapify(arr, i, 0);}
}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) {int temp = arr[i];arr[i] = arr[largest];arr[largest] = temp;heapify(arr, n, largest);}
}

总结

    本文介绍了Java中常见的排序算法,包括冒泡排序、选择排序、插入排序、快速排序、归并排序和堆排序。这些排序算法的实现虽然有所差异,但是它们都具有一定的规律和套路,掌握其中的一些核心思想和技巧对于Java程序员来说是非常重要的。当然,实际开发中,我们也可以选择使用Java中已经封装好的排序方法,如Arrays.sort()方法,来完成排序操作。

以二维表表现出各个排序的关系

在这里插入图片描述


http://chatgpt.dhexx.cn/article/iIl1WXp6.shtml

相关文章

Java排序算法(一):冒泡排序

冒泡排序 一、原理二、排序步骤三、实现代码四、复杂度分析 一、原理 冒泡排序是相邻的元素两两比较&#xff0c;把小的元素往前调或者把大的元素往后调&#xff0c;实现最大(小)值排列在一端。 注&#xff1a;相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法 …

十大经典排序算法(Java实现)

排序算法的重要性不言而喻&#xff0c;为了加深对这十种算法的理解&#xff0c;固写此文。 目录 1、冒泡排序&#xff08;Bubble Sort&#xff09;2、选择排序&#xff08;Selection Sort&#xff09;3、插入排序&#xff08;Insertion Sort&#xff09;4、希尔排序&#xff0…

Java排序算法——插入排序(Insertion Sort)

之前总结了交换排序的冒泡排序与选择排序的简单选择排序&#xff0c;这次我们来看看插入排序的简单插入排序~ 往期传送门&#xff1a; 冒泡排序&#xff1a; Java排序算法——冒泡排序&#xff08;Bubble Sort&#xff09;https://blog.csdn.net/babbfqb93/article/details/…

Java排序算法——冒泡排序(Bubble Sort)

冒泡排序是所有排序算法中最简单的一个排序&#xff0c;也是我个人学习的第一个排序方法&#xff0c;在这里重新进行一个总结。 冒泡排序&#xff08;Bubble Sort&#xff09;就如同其名称一样&#xff0c;水中的气泡由于压强的原因所以从下到上其大小也是从小到大&#xff0c…

Java排序算法——插入排序

Java排序算法——插入排序&#xff08;Insertion Sort&#xff09; 传送门 冒泡排序选择排序 简述 插入排序&#xff08;Insertion Sort&#xff09;是一种简单直观的排序算法。它的工作原理是通过构建有序序列&#xff0c;对于未排序数据&#xff0c;在已排序序列中从后向前…

Java实现排序算法

一、常见排序算法&#xff1a; 1、插入类排序&#xff1a; (1)直接插入排序 (2)希尔排序 2、选择类排序 (1)简单选择排序 (2)堆排序 3、交换类排序 (1)冒泡排序 (2)快速排序 4、归并排序 5、基数排序 二、内部排序&#xff1a;只考虑数据量较小仅需要使用内存的排序算法 三、…

Java排序算法——选择排序

Java排序算法——选择排序&#xff08;Selection sort&#xff09; 传送门 冒泡排序插入排序 简述 选择排序&#xff08;Selection sort&#xff09;是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小&#xff08;大&#xff09;元素&#xff0c;存放…

JAVA排序:快速排序算法

Java实现快速排序算法 快速排序算法体现了—分治思想&#xff1a;将大问题划分为多个相同独立的小问题&#xff0c;每个小问题的解决合在一起解决了大问题 实现快速排序的思想&#xff1a; {2,4,1,0,3,5}是目标数组 {0,1,2,3,4,5}是结果数组 选取中心轴pivot(中心轴的值用于比较…

Java排序算法——选择排序(Selection Sort)

上次总结了一下冒泡排序&#xff0c;这次来看看同样非常简单的选择排序 上期冒泡排序传送门&#xff1a; Java排序算法——冒泡排序&#xff08;Bubble Sort&#xff09;https://blog.csdn.net/babbfqb93/article/details/123005968?spm1001.2014.3001.5501 选择排序&#…

选择排序——Java排序算法

选择排序 选择排序&#xff08;SelectSort&#xff09;选择排序是所有排序中最简单的排序算法之一&#xff0c;同时也是要求我们必须掌握的排序算法之一。 时间复杂度 选择排序的时间复杂度为(n2) 算法步骤 1.在未排序的序列中找到最小或者最大的元素&#xff0c;存放到排…

java 排序api_JAVA排序算法API

上一个类 下一个类 框架 无框架 摘要&#xff1a; 嵌套 | 字段 | 构造函数 | 方法 详细信息&#xff1a; 字段 | 构造函数 | 方法 org.luosijin.test 类 Sort java.lang.Object org.luosijin.test.Sort public class Sort extends java.lang.Object Java实现几种常见排序方…

Java排序算法

7.1 排序算法的介绍 排序也称排序算法(Sort Algorithm)&#xff0c;排序是将一组数据&#xff0c;依指定的顺序进行排列的过程。 7.2 排序的分类 内部排序: 指将需要处理的所有数据都加载到内部存储器(内存)中进行排序。外部排序法&#xff1a; 数据量过大&#xff0c;无法全…

常见几种java排序算法

常见几种java排序算法 0. 总览时间复杂度和稳定性 1.插入排序2.分治排序法,快速排序法3.冒泡排序 low版4.冒泡排序 bigger版5.选择排序6. 归并排序8. 堆排序踩坑v1.0 巨慢不能用v2.0 太慢不能用v3.0 9. 其他排序7. 比较 0. 总览 时间复杂度和稳定性 平均最好最差稳定性冒泡n2…

Java常用实现八种排序算法与代码实现

一、交换排序 所谓交换&#xff0c;就是序列中任意两个元素进行比较&#xff0c;根据比较结果来交换各自在序列中的位置&#xff0c;以此达到排序的目的。 1. 冒泡排序 冒泡排序是一种简单的交换排序算法&#xff0c;以升序排序为例&#xff0c;其核心思想是&#xff1a; 从…

十大经典排序算法——java语言

文章目录 一、冒泡排序二、选择排序三、插入排序四、希尔排序五、归并排序六、快速排序七、堆排序八、计数排序九、桶排序十、基数排序 一、冒泡排序 概述&#xff1a; 冒泡排序是一种简单直观的排序算法。它重复的走访要排序的数列&#xff0c;一次比较两个元素&#xff0c;按…

Java常见排序算法

目录 1、归并排序 2、堆排序 3、基数排序 4、冒泡排序 5、希尔排序 6、快速排序 7、插入排序 8、选择排序 1、归并排序 1、基本思想 归并排序&#xff08;MERGE-SORT&#xff09;是利用归并的思想实现的排序方法&#xff0c;该算法采用经典的分治&#xff08;divide-a…

java实现七种经典排序算法

简单算法&#xff1a;冒泡&#xff0c;简单选择&#xff0c;直接插入 改进算法&#xff1a;希尔&#xff0c;堆&#xff0c;归并&#xff0c;快速 直接插入排序&#xff1a;将一个记录插入到已经拍好的有序列表中&#xff0c;从而得到一个新的、记录数增加1的有序表。 冒泡排…

java实现10种排序算法

1.冒泡排序(Bubble Sort) import java.util.Arrays; //冒泡排序 public class BubbleSort_01 {public static void main(String[] args) {int a[]{3,44,38,5,47,15,36,26,27,2,46,4,19,50,48};//记录比较次数int count0;//i0,第一轮比较for (int i 0; i < a.length-1; i) {…

SQL sever数据库触发器设计

SQL sever数据库触发器设计 一、目的: 能够理解触发器调用的机制。能够使用SQL命令创建DML触发器。能够完成触发器的修改、删除等管理任务。 二、触发器: 定义&#xff1a;触发器&#xff08; T rigger &#xff09;是 SQL server 提供给程序员和数据分析员来保证数据完整性…

MySQL——超详细数据库触发器教程

目录 一、触发器的概念 二、创建触发器 三、查看触发器 四、删除触发器 总结 一、触发器的概念 在实际开发中往往会碰到这样的情况&#xff1a; 当我们对一个表进行数据操作时&#xff0c;需要同步对其它的表执行相应的操作&#xff0c;正常情况下&#xff0c;如果我们使用…