排序算法
1. 插入类排序
1.1 直接插入排序
class Solution { public void insertSort(int[] arr, int n) { int tmp; for (int i = 1; i < n; i++) { // 将待插入的关键字暂存于tmp中 tmp = arr[i]; int j = i - 1; // 依次从待排关键字之前的关键字进行扫描 while (j >= 0 && tmp < arr[j]) { arr[j + 1] = arr[j]; --j; } // 找到插入位置 arr[j + 1] = tmp; } } }
时间复杂度
- 最坏情况:
- 最好情况:
- 平均时间复杂度:
2. 交换类排序
2.1 冒泡排序
class Solution { public void bubbleSort(int[] arr, int n) { boolean flag; int tmp; for (int i = n - 1; i >= 1; i--) { // 用flag标记本趟排序是否发生了交换 flag = false; for (int j = 1; j <= i; j++) { if (arr[j - 1] > arr[j]) { tmp = arr[j]; arr[j] = arr[j -1]; arr[j - 1] = tmp; flag = true; } } if (!flag) { return; } } } }
时间复杂度
- 最坏情况:
- 最好情况:
- 平均时间复杂度:
2.2 快速排序
class Solution { public void quickSort(int[] arr, int low, int high) { // 对从arr[low]到arr[high]的关键字进行排序 int tmp; int i = low, j = high; if (low < high) { tmp = arr[low]; // 将小于tmp的数放左边,将大于tmp的数放右边 while (i < j) { // 从右往左扫描,找到一个小于tmp的数 while (i < j && arr[j] >= tmp) { --j; } if (i < j) { arr[i] = arr[j]; ++i; } // 从左往右扫描,找到一个大于tmp的数 while (i < j && arr[i] < tmp) { ++i; } if (i < j) { arr[j] = arr[i]; --j; } arr[i] = tmp; quickSort(arr, low, i - 1); quickSort(arr, i + 1, high); } } } }
时间复杂度
- 最坏情况:
- 最好情况:
- 平均时间复杂度:
待排序列越接近无序,算法效率越高。
3. 选择类排序
3.1 简单选择排序
class Solution { public void selectSort(int[] arr, int n) { int tmp; for (int i = 0; i < n; i++) { int k = i; for (int j = i + 1; j < n; ++j) { if (arr[k] > arr[j]) { k = j; } } tmp = arr[i]; arr[i] = arr[k]; arr[k] = tmp; } } }
时间复杂度:
本文作者:Tursum
本文链接:https://www.cnblogs.com/zwx1123/p/17814482.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步