QuickSort 和 MergeSort
来源:互联网 发布:windos系统mac怎么 编辑:程序博客网 时间:2024/06/11 02:49
1. QuickSort
先整体有序再局部有序
int left = start, right = end; // key point 1: pivot is the value, not the index int pivot = A[(start + end) / 2]; // key point 2: every time you compare left & right, it should be // left <= right not left < right // partition while (left <= right) { while (left <= right && A[left] < pivot) { left++; } while (left <= right && A[right] > pivot) { right--; } // 交换 if (left <= right) { int temp = A[left]; A[left] = A[right]; A[right] = temp; left++; right--; } } // recursive // 此时left已经全部在pivot右边,right已经全部在pivot左边 quickSort(A, start, right); quickSort(A, left, end);
- MergeSort
先左右 分别recursive 再merge two
public void sortIntegers2(int[] A) { // Write your code here if(A == null || A.length == 0) { return; } int[] temp = new int[A.length]; mergeSort(A, 0, A.length - 1, temp); } private void mergeSort(int[] A, int start, int end, int[] temp) { if(start >= end) { return; } int middle = (start + end) / 2; mergeSort(A, start, middle, temp); mergeSort(A, middle + 1, end, temp); merge(A, start, end, temp); } // merge two sorted array private void merge(int[] A, int start, int end, int[] temp) { int middle = (start + end) / 2; int leftIndex = start; int rightIndex = middle + 1; int index = leftIndex; while(leftIndex <= middle && rightIndex <= end) { if(A[leftIndex] <= A[rightIndex]) { temp[index++] = A[leftIndex++]; } else { temp[index++] = A[rightIndex++]; } } // 可能有一边没有结束 while(leftIndex <= middle) { temp[index++] = A[leftIndex++]; } while(rightIndex <= end) { temp[index++] = A[rightIndex++]; } // copy temp for(int i = start; i <= end; i++) { A[i] = temp[i]; } }
阅读全文
0 0
- QuickSort 和 MergeSort
- MergeSort和QuickSort的比较
- QuickSort & MergeSort & InsertionSort
- insertSort,quickSort,mergeSort
- MergeSort与QuickSort
- 基本代码 QuickSort MergeSort Binary
- MergeSort与QuickSort的详细分析
- 【数据结构】 MergeSort与QuickSort的详细分析
- MergeSort与QuickSort的详细分析
- 一些知识点总结(HeapSort, MergeSort, QuickSort, PrefixTree, TopologicalSort)
- 单链表的排序 快速排序 归并排序 quicksort mergesort
- MergeSort
- mergesort
- MergeSort
- mergesort
- mergesort
- Mergesort
- mergesort
- JQuery源码学习(一续)
- Android 写自己的开源库,发布到 JitPack.io
- [原创]某驱动的内核调试检测学习内核调试引擎加载机制
- 欢迎使用CSDN-markdown编辑器
- 表单焦点: focus/blur
- QuickSort 和 MergeSort
- 处理器返回值 数值 字符串 自定义 map list 类型
- Flex DateField 日期范围
- 十进制-二进制转换测试 v2
- js判断用户的浏览设备是移动设备还是PC
- 如何使用vue-cli创建项目
- C++运算符重载范例
- 字符串相关算法例题
- 洛谷 P3398 仓鼠找sugar