Java选择排序算法
选择排序是一种简单直观的排序算法。它的工作原理是每次从未排序部分找到最小(或最大)的元素,然后将其放到已排序部分的末尾。下面是用Java实现选择排序算法的一个示例:
public class SelectionSort {
public static void selectionSort(int[] array) {
int n = array.length;
for (int i = 0; i < n - 1; i++) {
// 假设当前元素是未排序部分中最小的
int minIndex = i;
// 在未排序部分中找到实际的最小元素
for (int j = i + 1; j < n; j++) {
if (array[j] < array[minIndex]) {
minIndex = j;
}
}
// 交换找到的最小元素与当前位置元素
if (minIndex != i) {
int temp = array[minIndex];
array[minIndex] = array[i];
array[i] = temp;
}
}
}
public static void main(String[] args) {
int[] array = {64, 25, 12, 22, 11};
System.out.println("排序前的数组:");
printArray(array);
selectionSort(array);
System.out.println("排序后的数组:");
printArray(array);
}
// 辅助方法,用于打印数组
public static void printArray(int[] array) {
for (int i : array) {
System.out.print(i + " ");
}
System.out.println();
}
}
关键步骤:
- 选择未排序部分的最小元素:对于每一趟遍历,从未排序部分找出最小的元素。
- 交换过程:将找到的最小元素与当前未排序部分的第一个元素交换。
- 重复:对每一个位置重复上述步骤,直到数组完全排序。
复杂度分析:
- 时间复杂度:O(n²),其中n是数组的长度。在最坏、最好和平均情况下,选择排序的时间复杂度都是O(n²)。
- 空间复杂度:O(1),因为选择排序是就地排序,不需要额外的存储空间。
选择排序的优点是容易实现和理解,不需要额外的存储空间。然而,由于它的时间复杂度较高,在处理大型数据集时效率不高。