快速排序
来源:互联网 发布:vscode 内置web服务器 编辑:程序博客网 时间:2024/06/08 16:13
1.分解:
A[p..r]被划分为俩个(可能空)的子数组A[p ..q-1]和A[q+1 ..r],使得
A[p ..q-1] <= A[q] <= A[q+1 ..r]
2.解决:通过递归调用快速排序,对子数组A[p ..q-1]和A[q+1 ..r]排序。
3.合并。
java实现:
public int[] quickSort(int[] arrays) {
if (null == arrays || arrays.length == 0) {
return arrays;
}
quickSort(arrays, 0, arrays.length -1);
return arrays;
}
public void quickSort(int[] arrays, int begin, int end) {
if (begin == end) {
return;
}
if (begin < end) {
int mid = partition(arrays, begin, end);
quickSort(arrays, begin, mid - 1);
quickSort(arrays, mid + 1, end);
}
}
/**
*
* PARTITION(arrays, begin, end)
* 1.key ← arrays[end]
* 2. i ← begin - 1
* 3. for j ← begin to end - 1
* 4. do if
* arrays[j] ≤ key
* 5. then i ← i + 1
* 6. exchange arrays[i] <-> arrays[j]
* 7. exchange arrays[i + 1]<-> arrays[end]
* 8. return i + 1
*/
private int partition(int[] arrays, int begin, int end) {
int key = arrays[end];
int i = begin - 1;
for(int j = begin; j < end; j++){
if(arrays[j] < key ) {
i++;
swap(arrays,i,j);
}
}
swap(arrays,i+1,end);
return i+1;
}
private void swap(int[] arrays, int i, int j) {
int tmp = arrays[j];
arrays[j] = arrays[i];
arrays[i] = tmp;
}
public static void main(String[] args) {
int[] arrays = { 10, 5, 4, 8, 74, 58, 12, 14, 14, 56, 3, 1, 11, 57, 41,
102, 13,256 };
arrays = new QuickSort().quickSort(arrays);
for (int i = 0; i < arrays.length; i++) {
System.out.print(arrays[i]);
System.out.print(",");
}
}
}
- 快速排序
- 快速排序
- 快速排序
- 快速排序!
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- Spring2.5 注解实例
- F7的CU隔离设置
- ie6的兼容方法
- ssh: connect to host localhost port 22: Connection refused 问题
- android开发2-android项目结构
- 快速排序
- .pyc文件是什么?
- 大话设计模式之建造者模式
- HDU 1081(最大子矩阵问题)
- How to be a great software developer
- vim下接下Ctrl+S造成程序僵死
- position:fixed 固定定位(兼容IE6)问题及关闭浮动框的JS
- POJ 2676 Sudoku
- CCLabelTTF制造文字描边