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币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (源码)基于C语言的系统服务框架.zip
- (源码)基于Spring MVC和MyBatis的选课管理系统.zip
- (源码)基于ArcEngine的GIS数据处理系统.zip
- (源码)基于JavaFX和MySQL的医院挂号管理系统.zip
- (源码)基于IdentityServer4和Finbuckle.MultiTenant的多租户身份认证系统.zip
- (源码)基于Spring Boot和Vue3+ElementPlus的后台管理系统.zip
- (源码)基于C++和Qt框架的dearoot配置管理系统.zip
- (源码)基于 .NET 和 EasyHook 的虚拟文件系统.zip
- (源码)基于Python的金融文档智能分析系统.zip
- (源码)基于Java的医药管理系统.zip