您现在的位置是:首页 > Javascript
当前栏目
简单排序
2023-04-18 12:37:29 时间
选择排序
选择排序原理:选择一个数组中的第i个数,跟后面所有数进行比较,如果i位置数大于后面位置的数,交换,直到达到数组的末尾。
时间复杂度: O(N方)
代码:
public static void selectionSort(int[] arr) { if (arr == null || arr.length < 2) { return; } // 0~n-1 // 1~n-1 // 2~n-1 for (int i = 0; i < arr.length - 1; i++) { // i ~ N-1 // 最小值在哪个位置上 i~n-1 int minIndex = i; for (int j = i + 1; j < arr.length; j++) { // i ~ N-1 上找最小值的下标 minIndex = arr[j] < arr[minIndex] ? j : minIndex; } swap(arr, i, minIndex); } } public static void swap(int[] arr, int i, int j) { int tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp; }
冒泡排序
冒泡排序原理:冒泡排序是在数组0-i范围上,相邻两数进行判断,大数交换到后面,直到把0-i上的最大值移到最后,然后再在0- i-1上进行交换最大值。
时间复杂度: O(N方)
代码:
public static void bubbleSort(int[] arr) { if (arr == null || arr.length < 2) { return; } for (int e = arr.length - 1; e > 0; e--) { // 0 ~ e for (int i = 0; i < e; i++) { if (arr[i] > arr[i + 1]) { swap(arr, i, i + 1); } } } } // 交换arr的i和j位置上的值 public static void swap(int[] arr, int i, int j) { arr[i] = arr[i] ^ arr[j]; arr[j] = arr[i] ^ arr[j]; arr[i] = arr[i] ^ arr[j]; }
插入排序
插入排序原理:保证0-i上有序,然后让i和i+1进行比较,如果i<i+1不用交互,前面的数也不用比较;如果i>i+1的话,交互,然后i-1和i再进行比较。
时间复杂度: O(N方) 最好情况O(N)
代码:
public static void insertionSort(int[] arr) { if (arr == null || arr.length < 2) { return; } // 0~0 有序的 // 0~i 想有序 for (int i = 1; i < arr.length; i++) { // 0 ~ i 做到有序 // arr[i]往前看,一直交换到合适的位置停止 // ...(<=) ? <- i for (int j = i - 1; j >= 0 && arr[j] > arr[j + 1]; j--) { swap(arr, j, j + 1); } } } // i和j是一个位置的话,会出错 public static void swap(int[] arr, int i, int j) { arr[i] = arr[i] ^ arr[j]; arr[j] = arr[i] ^ arr[j]; arr[i] = arr[i] ^ arr[j]; }
相关文章
- ETL(二):表达式组件的使用
- ETL(三):汇总转换器组件(聚合)和表达式组件的合用
- ETL(四):LOOKUP查找转换组件的使用
- ETL(五):排序转换器组件的使用
- ETL(六):筛选器转换组件的使用
- ETL(八):路由器(rounter)转换组件的使用
- ETL(九):同构关联(源限定符转换组件的使用)
- ETL(十一):增量抽取(更新策略转换组件的使用)
- ETL(十二):缓慢变化维(其中一种实现方式)
- 浅谈企业级供应链投毒应急安全能力建设
- plotly怎么绘制漏斗图?
- 案例效果 | canvas刮刮卡抽奖
- HTML文档结构
- HTML的常用标签
- HTML表单__表单元素属性
- HTML5新增标签
- HTML标签分类
- VUE面试题
- HTML元素属性及意义
- 网页如何嵌套网页__HTML框架