常见的排序算法和复杂度
来源:互联网 发布:淘宝手机客服端下拉词 编辑:程序博客网 时间:2024/05/29 03:54
整体上,排序分
非线性时间比较类排序:交换类排序(快速排序和冒泡排序)、插入类排序(简单插入排序和希尔排序)、选择类排序(简单选择排序和堆排序)、归并排序(二路归并排序和多路归并排序);
线性时间非比较类排序:计数排序、基数排序和桶排序。
主要参考白话经典排序系列http://blog.csdn.net/morewindows/article/details/7961256,整理为JAVA相关适配
冒泡:
注意与http://blog.csdn.net/morewindows/article/details/6657829的区别。
/** * Created by superdaojian on 17/12/20. */public class BubbleSort { //从小到大,每次把较大的放到右侧 public static void simpleBubbleSort(int[] arr) { int len = arr.length; for (int i = 0; i < len; i++) { for (int j = 0; j < len - i - 1; j++) { if (arr[j] > arr[j + 1]) { swap(arr, j, j + 1); } } } } //升级版,某趟排序没有发生交换,说明已经有序 public static void juniorBubbleSort(int[] arr) { int len = arr.length; boolean flag; for (int i = 0; i < len; i++) { flag = false; for (int j = 0; j < len - i - 1; j++) { if (arr[j] > arr[j + 1]) { swap(arr, j, j + 1); flag = true; } } if(!flag){ break; } } } //高级版,某趟排序最后发生交换的位置,说明下次从头至此位置遍历即可 public static void seniorBubbleSort(int[] arr) { int len = arr.length; int flagNum = len; for (int i = 0; i < flagNum; i++) { i = 0; int tempFlagNum = flagNum; for (int j = 0; j < tempFlagNum - i - 1; j++) { if (arr[j] > arr[j + 1]) { swap(arr, j, j + 1); flagNum = j + 1; } } } } public static void swap(int[] arr, int i, int j) { arr[i] ^= arr[j]; arr[j] ^= arr[i]; arr[i] ^= arr[j]; } public static void main(String[] args) { int[] arr = new int[]{1, 2, 5, -1, -2, 8}; printAllNum(arr); seniorBubbleSort(arr); printAllNum(arr); } public static void printAllNum(int[] arr) { for (int i : arr) { System.out.println(i); } }}
阅读全文
0 0
- 常见的排序算法和复杂度
- 常见排序算法的稳定性和时间复杂度小结
- 常见排序算法复杂度
- 常见排序算法复杂度
- 常见排序算法复杂度
- 常见排序算法时间复杂度和空间复杂度表
- 常见排序算法以及时间复杂度和空间复杂度
- 常见的排序算法的复杂度问题
- 常见排序算法的时间复杂度
- 常见排序算法的复杂度以及稳定性
- 常见排序算法及对应的时间复杂度和空间复杂度
- 常见排序算法的时间复杂度和空间复杂度对比表
- 常见排序算法及对应的时间复杂度和空间复杂度
- 常见排序算法以及对应的时间复杂度和空间复杂度
- 常见排序算法的时间复杂度和空间复杂度对比表
- 常见排序的时间复杂度和空间复杂度
- 常见排序算法时间复杂度
- 【数据结构】常见排序算法复杂度
- windows 2012R2安装oracle 12C界面显示空白
- 如何设计实现真正的响应式微服务系统?
- zynq QSPI
- 轮播封装(初步简单封装)
- 学习的基本法测之一:比较法
- 常见的排序算法和复杂度
- 读properties和写properties文件
- java web项目测试实现银联支付
- 微服务改造—架构设计
- JavaScript中MVVM框架是如何实现双向绑定的
- (转)TCP连接异常断开检测
- 浅淡圣杯布局与双飞翼布局
- Oracle基础操作
- 利用jxl读取xls文件