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
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 软件项目开发流程规范说明文档.pdf
- 网站简介获奖科研报告论文-3.docx
- 用户通信终端维修员国家职业标准.doc
- 2023年月计算机等级考试二级上机题汇编.doc
- 研发项目管理培训.ppt
- 网络接入控制解决方案.pdf
- Discuz 论坛接口实现及微信小程序对接方案
- 电子商务团队薪资体系架构.docx
- 基于单片机计数器设计.doc
- vc++五子棋课程设计.doc
- 综合布线复习.pptx
- 基于PLC温室温度控制系统的设计.doc
- modelcontextprotocol_kotlin-sdk-Kotlin资源
- 麦老师网络推广方案.docx
- 网络教研教学个人学年工作总结5篇.doc
- 综合布线工程11综合布线系统的验收方案.ppt


