Java三种排序 Java三种排序
在Java编程语言中,有多种排序算法可供使用。这里我们将探讨三种基本的排序算法:冒泡排序、选择排序和插入排序。这些算法都是基于数组的简单排序方法,适合理解排序的基本原理。 我们来看冒泡排序。冒泡排序是一种交换排序,其核心思想是通过反复遍历待排序的数组,依次比较相邻元素并根据需要交换位置,使较大的元素逐渐“浮”到数组的末尾,就像水中的气泡一样上升。在Java中,冒泡排序的实现如下: ```java public class BubbleSort { public static void main(String[] args) { int[] array = {29, 23, 56, 40, 12, 63, 89, 7, 96, 38}; System.out.println("Before sort:"); Display(array); Sort(array); System.out.println("After sort:"); Display(array); } public static void Sort(int[] array) { int temp = 0; for(int i = array.length - 1; i > 0; i--) { for(int j = 0; j < i; j++) { if(array[j] > array[j + 1]) { temp = array[j]; array[j] = array[j + 1]; array[j + 1] = temp; } } } } public static void Display(int[] array) { for(int i = 0; i < array.length; i++) System.out.print(array[i] + " "); System.out.println(); } } ``` 冒泡排序的时间复杂度为O(N^2),其中N是数组的长度。这意味着在最坏的情况下,需要进行N * (N - 1) / 2次比较和相同次数的交换操作。 接下来是选择排序,它的工作原理是在每一轮中找到数组中最小(或最大)的元素,并将其与第一个未排序的位置交换。这样,每次遍历都会确保当前未排序的部分有一个最小(或最大)的元素在前面。Java实现如下: ```java public class SelectSort { public static void main(String[] args) { int[] array = {29, 23, 56, 40, 12, 63, 89, 7, 96, 38}; System.out.println("Before sort:"); Display(array); Sort(array); System.out.println("After sort:"); Display(array); } public static void Sort(int[] array) { for(int i = 0; i < array.length - 1; i++) { int minIndex = i; for(int j = i + 1; j < array.length; j++) { if(array[j] < array[minIndex]) minIndex = j; } if(minIndex != i) { int temp = array[i]; array[i] = array[minIndex]; array[minIndex] = temp; } } } public static void Display(int[] array) { for(int i = 0; i < array.length; i++) System.out.print(array[i] + " "); System.out.println(); } } ``` 选择排序的时间复杂度同样是O(N^2),但在交换次数上通常少于冒泡排序,因为它只需要N次交换,即使在最坏的情况下。 插入排序是一种简单直观的排序算法,它将数组分为已排序和未排序两部分,每次从未排序部分取出一个元素,插入到已排序部分的正确位置。Java实现如下: ```java public class InsertionSort { public static void main(String[] args) { int[] array = {29, 23, 56, 40, 12, 63, 89, 7, 96, 38}; System.out.println("Before sort:"); Display(array); Sort(array); System.out.println("After sort:"); Display(array); } public static void Sort(int[] array) { for(int i = 1; i < array.length; i++) { int key = array[i]; int j = i - 1; while(j >= 0 && array[j] > key) { array[j + 1] = array[j]; j--; } array[j + 1] = key; } } public static void Display(int[] array) { for(int i = 0; i < array.length; i++) System.out.print(array[i] + " "); System.out.println(); } } ``` 插入排序在最好的情况下(即输入数组已经是有序的),时间复杂度为O(N),但在最坏的情况下(即输入数组是反序的),时间复杂度同样为O(N^2)。 这三种排序算法各有优缺点。冒泡排序简单易懂,但效率较低;选择排序虽然交换次数较少,但总体效率与冒泡排序相当;插入排序在处理部分有序的数组时表现较好,但对完全无序的数据效率较低。在实际开发中,对于大规模数据的排序,通常会使用更高效的排序算法,如快速排序、归并排序或堆排序等。
剩余55页未读,继续阅读
- 粉丝: 0
- 资源: 8
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 广电大数据可视化项目实战
- 电缆、树木检测15-YOLO(v5至v11)、COCO、CreateML、Paligemma、TFRecord、VOC数据集合集.rar
- 基于smic40nm工艺,SAR ADC ,逐次逼近型 10bit,50MHZ,适合新手入门学习使用,有配套的教程 基于smic40nm工艺,采样时钟异步,含有冗余设计,电路包括但不限于栅压自举开关
- 去嗡嗡嗡钱钱钱嗡嗡嗡钱钱钱
- Java中使用AES进行加解密示例代码AESExample.zip
- 基于ECMS搭建的混合动力汽车simulink模型 可用于能量管理研究 模型运行无误 联系赠送模型搭建参考文献一份,赠送nedc、udds等常用工况数据表,可自行更改工况进行模型开发
- eladmin-jpa 版本:项目基于 Spring Boot 2.1.0 、 Jpa、 Spring Security、redis、Vue的前后端分离的后台管理系统
- python hhhhhhhh
- 电缆植被检测16-YOLO(v5至v11)、COCO、CreateML、Paligemma、VOC数据集合集.rar
- 【诚通证券-2024研报】伊利股份2024年三季报点评:业绩持续承压,年底或有望企稳.pdf
- 爬虫火车头解决滑块认证,手写个vps自动拨号脚本,达到更换ip效果(附源码)
- Admin.NET(ZRAdmin)是一款前后端分离的、跨平台基于RBAC的通用权限管理后台 ORM采用SqlSugar
- Delphi 12 控件之3KHGEM2.rar
- 基于SpringBoot2/3+Sa-Token+Mybatis-Plus和Vue3+Ant Design Vue+Uni-App+Uni-UI,并以高质量代码为核心,简洁、高效、安全的快速开发平台
- 多思计组实验(计算机组成原理上机实验):实验4 总线与微命令
- 空中俯视物体人检测7-YOLO(v5至v9)、COCO、CreateML、Darknet、Paligemma、TFRecord数据集合集.rar