0 介绍
- 三种最简单、最基本的排序
- 时间复杂度均为 O(n^2)
- 空间复杂度均为 O(1)
- 唯独直接选择排序是 不稳定 的
1 直接选择排序
- 思想:每次选择最小的值交换
- 动图演示
- 代码
void selectionSort(int arr[]) { for (int i = 0; i < arr.length; i++) { int minIndex = i; for (int j = i + 1; j < arr.length; j++) { minIndex = arr[j] < arr[minIndex] ? j:minIndex; } swap(arr,i,minIndex); } }
2 冒泡排序
- 思想:前者比后者大交换
- 动图演示
- 代码
void bubbleSort(int[] arr) { for (int i = arr.length - 1; i > 0; i--) { for (int j = 0; j < i; j++) { if (arr[j] > arr[j + 1]) { swap(arr, j, j + 1); } } } }
3 插入排序
- 思想:将后者插入到前面已排好序部分的合适位置
- 动图演示
- 代码
void insertionSort(int[] arr) { for (int i = 1; i < arr.length; i++) { for (int j = i - 1; j >= 0; j--) { if (arr[j] > arr[j + 1]) { swap(arr, j, j + 1); } } } }