归并排序和快速排序的实现
来源:互联网 发布:开名淘宝店是真是假 编辑:程序博客网 时间:2024/05/17 01:17
两种排序都是用的是divide and conquer的思想,时间复杂度都是O(nlogn).
归并排序的难点在merge部分,T(n) = 2(n/2) + n, 所以复杂度是O(nlogn)
public static void mergeSort(int[] A){if(A == null || A.length <= 1) return;mergeSort2(A, 0, A.length - 1);}private static void mergeSort2(int[] A, int start, int end){if(start < end){int mid = (start + end) / 2;mergeSort2(A, start, mid);mergeSort2(A, mid + 1, end);merge(A, start, mid, end);}}private static void merge(int[] A, int start, int mid, int end){int[] temp = new int[end - start + 1];int i = start, j = mid + 1, k = 0;while(i <= mid && j <= end){if(A[i] <= A[j]){temp[k++] = A[i++];} else {temp[k++] = A[j++];}}while(i <= mid){temp[k++] = A[i++];}while(j <= end){temp[k++] = A[j++];}for(int p = 0; p < temp.length; p++){A[start++] = temp[p];}}
public static void quickSort(int[] A){if(A == null || A.length <= 1) return;quickSort2(A, 0, A.length - 1);}private static void quickSort2(int[] A, int start, int end){if(start < end){int i = start, j = end, pivot = A[start];while(i < j){while(i < j && A[j] >= pivot){j--;}while(i < j && A[i] <= pivot){i++;}if(i < j){int temp = A[i];A[i] = A[j];A[j] = temp;}}A[start] = A[i];A[i] = pivot;quickSort2(A, start, i - 1);quickSort2(A, i + 1, end);}}
0 0
- 归并排序和快速排序的实现
- 快速排序和归并排序的实现
- 归并排序和快速排序算法实现
- c++ 实现 归并排序和快速排序
- python实现快速排序和归并排序
- 归并排序和快速排序的算法实现
- Leetcode21.+Leetcode75. 归并排序和快速排序的实现
- 归并排序和快速排序的比较
- 归并排序和快速排序的浅析
- 单链表的快速排序和归并排序
- 归并排序和快速排序的比较
- Scala实现冒泡排序、归并排序和快速排序
- Scala实现冒泡排序、归并排序和快速排序
- 快速排序和归并排序
- 归并排序和快速排序
- 归并排序和快速排序
- 归并排序和快速排序
- 归并排序和快速排序
- 在CentOS上安装Java环境:[1]使用yum安装java
- 四月份计划
- K临近算法
- strlen和sizeof的使用及用法补充
- 大数据时代有哪些投资机遇?(来源: BWCHINESE中文网)
- 归并排序和快速排序的实现
- JDeveloper Issue: "The specified schema object name is not an existing object. Unselect Existing Ob
- @property的属性
- Linux 内核中的 GCC 特性
- 缓存映射小笔记
- Android字体切换
- J2SE——面向对象总结
- 找出大于等于v的最小的2的倍数
- unity3d4.6 中文视频教程之飞车游戏