排序算法总结
来源:互联网 发布:企业注册的淘宝号 编辑:程序博客网 时间:2024/06/04 20:14
快排:
时间复杂度最差:O(n^2),平均O(nlgn)
public void myQuickSort(int[] a, int start, int end){ //a:待排序数组 //start:待排序起点下标 //end:待排序终点下标 if (start >= end) return; int tar = a[start]; int s = start; int b = end; while (s < b) { while (s < b && a[s] <= tar) s++; while (s < b && a[b] > tar) b--; int temp = a[s]; a[s] = a[b]; a[b] = temp; } if (s > tar) s-=1; a[start] = a[s]; a[s] = tar; myQuickSort(a, start, s-1); myQuickSort(a, s+1, end); }
归并排序:
时间复杂度O(nlgn)
public void merge(int[] a, int p, int q, int r) { //将带排序数组a下标从p到q和q+1到r合并。 int n1 = q-p+1; int n2 = r-q; int[] arr1 = new int[n1]; int[] arr2 = new int[n2]; for (int i = 0; i < n1; i++) arr1[i] = a[p+i]; for (int i = 0; i < n2; i++) arr2[i] = a[q+1+i]; int arr1_id = 0; int arr2_id = 0; while (p < r) { if (arr1[arr1_id] < arr2[arr2_id]) { a[p++] = arr1[arr1_id++]; }else { a[p++] = arr2[arr2_id++]; } if (arr1_id == n1) { while(arr2_id < n2) a[p++] = arr2[arr2_id++]; } if (arr2_id == n2) { while(arr1_id < n1) a[p++] = arr1[arr1_id++]; } } } public void mergeSort(int[] a, int p, int r) { //将带排序数组:a。 //起点下标:p //终点下标:r if (p == r) return; int q = (p + r) / 2; mergeSort(a, p, q); mergeSort(a, q+1, r); merge(a, p, q, r); }
冒泡排序
时间复杂度O(n^2)
public void bubbleSort(int[] a) { int n = a.length; for (int i = 0; i < n; i++) { boolean change = false; for (int j = 0; j < n-i-1; j++) { if (a[j] > a[j+1]) { int temp = a[j+1]; a[j+1] = a[j]; a[j] = temp; change = true; } } if (!change) return; } }
插入排序:
时间复杂度最差:O(n^2),最好O(n)
public void insertionSort(int[] a) { //a:待排序数组 for (int i = 0; i < a.length; i++) { int id = i; int temp = a[i]; for (int j = i-1; j >= 0; j--) { if (temp < a[j]) id = j; else break; } int t = i; while (t > id) { a[t] = a[t-1]; t--; } a[id] = temp; } }
选择排序
时间复杂度最差:O(n^2)
public void selectSort(int[] a) { for(int i = 0; i < a.length; i++) { int min = i; for (int j = i+1; j < a.length; j++) { if (a[j] < a[min]) min = j; } if (min != i) { int temp = a[i]; a[i] = a[min]; a[min] = temp; } } }
阅读全文
0 0
- 算法--排序算法总结
- 算法:排序算法总结
- 算法:排序算法总结
- 算法-排序算法总结
- 算法-排序算法总结
- 【排序算法】排序算法总结
- 排序算法总结---希尔排序
- 排序算法总结---冒泡排序
- 排序算法总结----快速排序
- 排序算法总结---希尔排序
- 排序算法总结【内排序】
- 排序算法之内排序总结
- 排序算法总结:冒泡排序
- 【排序算法总结】冒泡排序
- 【排序算法总结】选择排序
- 排序算法总结
- 排序算法大总结
- 排序算法总结
- kali下敏感目录扫描工具Nikto使用
- Android笔记:解决Android 7.0 FileUriExposedException url异常
- IntelliJ IDEA 的project structure
- Qt 用QRegExp从字符串中提取车牌号码
- java 变量初始化
- 排序算法总结
- SVN版本库搭建
- ASP.NET MVC5 + EF6 通过model层创建controller时需要重新生成解决方案。
- 在没有DOM操作的日子里,我是怎么熬过来的(上)
- IDEA环境下GIT操作浅析之一Idea下仓库初始化与文件提交涉及到的基本命令
- Windows7下安装与破解IntelliJ IDEA2017
- CentOS7 配置 VPNServer 及 使用shadowsocks代理的方法
- java设计模式之迭代器模式
- javaUtil---导出数据到word表格中后,下载word文档