Java排序算法详解:选择排序与插入排序

2 下载量 145 浏览量 更新于2024-08-29 收藏 58KB PDF 举报
"常用Java排序算法详解" 在编程领域,排序算法是基础且重要的部分,尤其在Java编程中,掌握各种排序算法有助于优化程序性能。本文将深入解析两种常见的Java排序算法:选择排序(SelectSort)和插入排序(InsertSort)。 一、选择排序(SelectSort) 选择排序的基本思想是通过n-1轮比较找到n个元素中的最小值,并将其放在正确的位置。每一轮比较都会确定一个元素的位置,使得前i个元素是整个数组中最小的i个元素。以下是Java实现的选择排序: ```java public class SelectSort { public static void selectSort(int[] array) { int i, j, temp, flag; for (i = 0; i < array.length; i++) { temp = array[i]; flag = i; for (j = i + 1; j < array.length; j++) { if (array[j] < temp) { temp = array[j]; flag = j; } } if (flag != i) { array[flag] = array[i]; array[i] = temp; } } } } ``` 这个算法的时间复杂度是O(n^2),其中n是数组的长度。虽然在最坏的情况下效率较低,但它的优点在于它总是进行n次交换,即使输入已经排序,它也会完成全部的比较和交换,因此它不是稳定的排序算法。 二、插入排序(InsertSort) 插入排序的工作原理是将数组分为已排序和未排序两部分。在每一步,它会从未排序的元素中取出一个,然后把它插入到已排序部分的正确位置。以下是Java实现的插入排序: ```java public class InsertSort { public static void insertSort(int[] a) { if (a != null) { for (int i = 1; i < a.length; i++) { int temp = a[i]; int j = i; if (a[j - 1] > temp) { while (j >= 1 && a[j - 1] > temp) { a[j] = a[j - 1]; j--; } } a[j] = temp; } } } } ``` 插入排序在最好情况下(即输入数组已经是有序的)具有O(n)的时间复杂度,而在最坏情况下(逆序数组)则为O(n^2)。它是一种稳定的排序算法,意味着相同元素的相对顺序不会改变。 这两种排序算法各有特点,选择排序适用于元素较少或者部分已排序的情况,而插入排序在小规模数据或者近似有序的数据上表现优秀。理解并掌握这些基础排序算法对于提升编程能力至关重要,因为它们是更复杂排序算法(如快速排序、归并排序等)的基础。