Java——常见的几种排序算法

article/2025/9/30 11:33:06

一、冒泡排序

每次冒泡过程都是从数列的第一个元素开始,然后依次和剩余的元素进行比较, 跟列队一样, 从左到右两两相邻的元素比大小, 高的就和低的换一下位置. 最后最高(值最大)的肯定就排到后面了.

但是这只是把最高的排到后面了, 还得找出第二高的, 于是又从第一个开始两两比较, 高的往后站, 然后第二高的也到后面了.

然后是第三高的再往后排…
在这里插入图片描述

 

public class JavaSort {public static void main(String[] args) {int[] arr ={4,1,3,6,2,5};for (int i = 1; i < arr.length; i++) {  //外循环控制冒泡次数for (int j = 0; j < arr.length-1; j++) {    //内循环用来控制冒泡一层层到最后if (arr[j]>arr[j+1]){   //如果前一个数比后一个数大,两者交换int temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}}for (int i : arr) {System.out.println(i);}}
}

二、 冒泡排序改进版

在这个版本中,改动了两点

  1. 第一点是加入了一个布尔值,判断第二层循环中的调换有没有执行,如果没有进行两两调换,说明后面都已经排好序了,已经不需要再循环了,直接跳出循环,排序结束.
  2. 第二点是第二层循环不再循环到arr.length - 1,因为外面的i循环递增一次,说明数组最后就多了一个排好序的大泡泡.第二层循环也就不需要到最末尾一位了,可以提前结束循环
public class JavaSort {public static void main(String[] args) {int[] arr ={4,1,3,6,2,5};for (int i = 1; i < arr.length-1; i++) {//初始化一个布尔值boolean flag = true;for (int j = 0; j < arr.length-1; j++) {if (arr[j] > arr[j+1]){int temp = arr[j];arr[j] = arr[j+1];arr[j] = temp;//改变 flagflag = false;}}if (flag){break;}}for (int i : arr) {System.out.println(i);}}
}

三、选择排序

选择排序也是一种简单直观的排序算法,实现原理比较直观易懂:
首先在未排序数列中找到最小元素,然后将其与数列的首部元素进行交换,然后,在剩余未排序元素中继续找出最小元素,将其与已排序数列的末尾位置元素交换。以此类推,直至所有元素圴排序完毕。

在这里插入图片描述

 

public class JavaSort {public static void main(String[] args) {int[] arr ={4,1,3,6,2,5};for (int i = 0; i < arr.length-1; i++) {int min = i;    //假设i为当前轮的最小值的下标for (int j = i+1; j < arr.length; j++) {if (arr[j] < arr[min]){//找到当前遍历区间最小的值的下标min = j;}}if (min != i){//将最小值交换至本轮的起始位置int temp = arr[min];arr[min] = arr[i];arr[i] = temp;}}for (int i : arr) {System.out.println(i);}}
}

四、插入排序 

一次插入排序的操作过程:
  将待插元素,依次与已排序好的子数列元素从后到前进行比较,如果当前元素值比待插元素值大,则将移位到与其相邻的后一个位置,否则直接将待插元素插入当前元素相邻的后一位置,因为说明已经找到插入点的最终位置

在这里插入图片描述

 

public class JavaSort {public static void main(String[] args) {int[] arr ={4,1,3,6,2,5};for (int i = 1; i < arr.length; i++) {//挖出一个要用来插入的值,同时位置上留下一个可以存新的值的坑int temp = arr[i];int j = i -1;//在前面有一个或连续多个值比temp大的时候,一直循环往前面找,将temp插入到这串值前面while (j >= 0 && arr[j] > temp){//当arr[j]比temp大的时候,将j向后移一位,正好填到坑中arr[j+1] = arr[j];j--;}//将temp插入到最前面arr[j+1] = temp;}for (int i : arr) {System.out.println(i);}}
}

五、分治排序法,快速排序法

简单的说, 就是设置一个标准值, 将大于这个值的放到右边(不管排序), 将小于这个值的放到左边(不管排序), 那么这样只是区分了左小右大, 没有排序, 没关系, 左右两边再重复这个步骤.直到不能分了为止.
详细说就是:

  1. 选择待排数列的首部第一个元素为基准元素x,设置两指针,分别指向数列首尾部位置,假设两指针分别设为i和j。
  2. 每次遍历的过程是这样的,首先从右到左遍历指针j所指向的元素,直到j指向的元素值小于基准元素x时,停止遍历,将其放到i的位置(因为i的值已经拷贝成了基准x腾出了位置)
  3. i往右挪一步, i++,接着轮到指针i从左到右遍历,直到i所指向的元素值大于基准元素x时,停止遍历,将其放到j的位置(因为上面一步j的值已经占用到了i的位置,腾出位置了)
  4. 依此类推,两边轮流遍历, 直到指针i与指针j相等或者大于(实际肯定是i==j)时,停止外部循环。此时必定左边都是比x小的, 右边是比x大的.
  5. 最后直接将基准元素x直接放置于指针i所指向的位置即可
  6. 完成分区操作, 从i的位置一分为二, 左边和右边再递归执行上面的操作. 层层细分

接下来,我们通过示图来展示上述分区算法思路的过程:

在这里插入图片描述

public class JavaSort {static void quickSort(int[] arr,int begin,int end){//先定义两个参数接收排序起始值和结束值int a = begin;int b = end;//先判断a是否大于bif (a >= b) {//没必要排序return;}//基准数,默认设置为第一个值int x = arr[a];//循环while (a < b) {//从后往前找,找到一个比基准数x小的值,赋给arr[a]//如果a和b的逻辑正确--a<b ,并且最后一个值arr[b]>x,就一直往下找,直到找到后面的值大于xwhile (a < b && arr[b] >= x) {b--;}//跳出循环,两种情况,一是a和b的逻辑不对了,a>=b,这时候排序结束.二是在后面找到了比x小的值if (a < b) {//将这时候找到的arr[b]放到最前面arr[a]arr[a] = arr[b];//排序的起始位置后移一位a++;}//从前往后找,找到一个比基准数x大的值,放在最后面arr[b]while (a < b && arr[a] <= x) {a++;}if (a < b) {arr[b] = arr[a];//排序的终止位置前移一位b--;}}//跳出循环 a < b的逻辑不成立了,a==b重合了,此时将x赋值回去arr[a]arr[a] = x;//调用递归函数,再细分再排序quickSort(arr,begin,b-1);quickSort(arr,a+1,end);}public static void main(String[] args) {int[] arr ={4,1,3,6,2,5};quickSort(arr,0,arr.length-1);for (int i : arr) {System.out.println(i);}}
}

 


http://chatgpt.dhexx.cn/article/1oEsisoT.shtml

相关文章

Java实现选择排序

Java实现选择排序 选择排序原理为&#xff1a;随机确定一个标志位&#xff08;一般为第一个数字&#xff09;作为最小数&#xff0c;然后向后遍历&#xff0c;找到比标志位更小的数便与标志位互换位置并更新最小数&#xff0c;实现步骤为&#xff1a; 将数组的第一个数字设置…

【算法】选择排序法

一、介绍 1.选择排序法是将序列分为两段&#xff0c;有序前列和无序后列&#xff0c;每次查找无序后列中最大元素&#xff0c;将其插入到有序前列的最末尾处&#xff0c;直至无序后列最后一个元素&#xff0c;最终排序后的序列为降序序列 2.适用于包括数组和向量在内的序列 …

选择排序的两种算法(Java代码实现)

目录 选择排序&#xff1a; 基本思想&#xff1a; 1&#xff1a;简单选择排序&#xff1a; 基本思想&#xff1a; 过程&#xff1a; 2&#xff1a;堆排序&#xff1a; 基本思想&#xff1a; 过程&#xff1a; 选择排序&#xff1a; 基本思想&#xff1a; 每一趟从待排序…

Java选择排序

1. 选择排序 选择排序是一种简单直观的排序算法&#xff0c;其基本原理是每一次从待排序的数组里找到最小值&#xff08;最大值&#xff09;的下标&#xff0c;然后将最小值&#xff08;最大值&#xff09;跟待排序数组的第一个进行交换&#xff0c;然后再从剩余的未排序元素中…

数据仓库理论知识

数据仓库 1.1 数仓基础知识 1.1.1. 为什么要有数据仓库 通常数据仓库的数据来自各个业务应用系统。业务系统中的数据形式多种多样&#xff0c;可能是 Oracle、MySQL、SQL Server 等关系数据库里的结构化数据&#xff0c;可能是文本、CSV 等平面文件或 Word、Excel 文档中的数…

数据仓库技术中的MPP

数据仓库世界里面的massively parallel processing 大概定义&#xff1a; MPP 是将任务并行的分散到多个服务器和节点上&#xff0c;在每个节点上计算完成后&#xff0c;将各自部分的结果汇总在一起得到最终的结果。       首先MPP 必须消除手工切分数据的工作量。 这是…

数据挖掘和数据仓库之间的区别

数据挖掘和仓储对于任何希望在全球或国家层面获得认可的组织来说都是必不可少的两个过程。这两种技术都有助于防止数据欺诈并提高管理统计数据和排名。数据挖掘用于依靠在数据仓库阶段收集的数据来检测重要模式。 数据挖掘和数据仓库都被视为数据分析的一部分。但它们以不同的方…

数据仓库ETL技术探究

ETL概述 在构建商业智能系统的时候&#xff0c;如何正确有效地将分散在各个不同数据源中的信息整合到系统中成为了整个系统成败的关键&#xff0c;直接影响到系统的运行效率和最终结果。 ETL正是解决这一问题的有力工具。 ETL是指把数据从数据源装人数据仓库的过程&#xff0c…

数据仓库与数据挖掘知识点梳理

数据仓库与数据挖掘知识点梳理 一&#xff1a;数据挖掘 1&#xff1a;什么是数据挖掘 数据挖掘是从大量的数据中挖掘出隐含的、未知的、用户可能感兴趣的和对决策有潜在价值的知识和规则。 ----简单的说&#xff0c;数据挖掘就是从大量的数据中发现有用信息的过程 数据的丰富…

Greenplum 实时数据仓库实践(1)——数据仓库简介

目录 1.1 什么是数据仓库 1.2 操作型系统与分析型系统 1.2.1 操作型系统 1.2.2 分析型系统 1.2.3 操作型系统和分析型系统对比 1.3 抽取-转换-装载 1.3.1 数据抽取 1.3.2 数据转换 1.3.3 数据装载 1.3.4 开发ETL系统的方法 1.4 数据仓库架构 1.4.1 基本架构 …

数据仓库 OLAP

一、数据库 vs. 数据仓库 1. 构建目的不同&#xff1a;数据库主要用于实现企业的日常业务管理&#xff0c;提高业务运营的效率 数据仓库用于将多个数据源的数据进行集成&#xff0c;用于分析&#xff0c;结果辅助决策 2. 管理数据不同&#xff1a;数据库通常只包含当前数据&…

数据仓库基本知识

目录 1.数据仓库 1.1 数据仓库起源 1.1.1 联机事务处理系统&#xff08;On-Line Transaction Processing&#xff0c;OLTP&#xff09; 1.1.2 联机分析处理系统&#xff08;On-Line Analytical Processing&#xff0c;OLAP&#xff09; 1.1.3 建立DW的基本条件 1.2 数据仓…

数据仓库框架指导

目录 1, 数据仓库 DW 2, 数据库 vs 数据仓库 3&#xff0c;数据仓库历史 3.1&#xff0c;历史 4&#xff0c;维度建模 4.1&#xff0c;概念 4.2&#xff0c;建模模型 4.3&#xff0c;结构 4.4&#xff0c;事实表 4.5&#xff…

Oracle 数据仓库详解

文章目录 1 概述2 数据仓库2.1 数仓分层2.2 维度建模 1 概述 数据库 VS 数据仓库 数据库是面向事务设计的&#xff0c;属于 OLTP&#xff08;在线事务处理&#xff09;系统&#xff0c;主要操作是随机读写&#xff1b;在设计时尽量避免冗余&#xff0c;常采用范式规范来设计数…

数据仓库原理

1.简介 1.1诞生背景 历史数据积存&#xff1a;历史数据使用频率 低&#xff0c;堆积在业务科中&#xff0c;导致性能下降&#xff1b;企业数据分析需要&#xff1a;各个部门自己建立独立的数据抽取系统&#xff0c;导致数据不一致&#xff1b; 1.2基本概述&#xff08;Data …

数据仓库入门介绍

&#x1f34a;最近很多学弟学妹问我&#xff0c;我实习的工作是内容是什么&#xff1f;有没有一些可参考的学习路线&#xff1f;每次我都说是数仓开发&#xff0c;但是很多同学不太了解什么是数据仓库&#xff0c;于是我就写一篇博客&#xff0c;来介绍一下数据仓库&#xff0c…

大数据开发---数据仓库技术

1、什么是数据仓库 数据仓库&#xff0c;英文名称为Data Warehouse&#xff0c;可简写为DW或DWH。数据仓库&#xff0c;是为企业所有级别的决策制定过程&#xff0c;提供所有类型数据支持的战略集合。它出于分析性报告和决策支持目的而创建。为需要业务智能的企业&#xff0c;提…

【简介】数据仓库技术实现

数据仓库建设方案有两种&#xff0c;一种是传统架构的数据仓库&#xff0c;一种是大数据架构的数据仓库。 传统数据仓库 传统数据仓库是由单机数据库发展而来的。业务数据库一般是关系型数据库&#xff08;RDBMS&#xff09;&#xff0c;那数据仓库在建设初期&#xff0c;也会…

数据仓库需要的技术

数据仓库和技术 首先对于数仓我们应该知道&#xff0c;相比较于传统数据库来说&#xff0c;它需要的操作要相对简单一些&#xff0c;在数仓中没有联机更新数据的需要&#xff0c;只有一些非常少的锁定需要 然后了解一下数据仓库都有什么需求 1、管理大量的数据 对于数仓而言…