java快速排序
来源:互联网 发布:淘宝搜索量查询 编辑:程序博客网 时间:2024/06/05 03:28
/**
* 这段程序并不难,应该很好看懂,我把过程大致讲一下,首先你的脑子里先浮现一个数组和三个指针,
* 第一个指针称为p指针,在整个过程结束之前它牢牢的指向第一个数,第二个指针和第三个指针分别为lo指针和hi指针,
* 分别指向最左边的值和最右边的值。lo指针和hi指针从两边同时向中间逼近,在逼近的过程中不停的与p指针的值比较,
* 如果lo指针的值比p指针的值小,lo++,还小还++,再小再++,直到碰到一个大于p指针的值,这时视线转移到hi指针,
* 如果 hi指针的值比p指针的值大,hi--,还大还--,再大再--,直到碰到一个小于p指针的值。
* 这时就把lo指针的值和hi指针的值做一个调换。持续这过程直到两个指针碰面,这时把p指针的值和碰面的值做一个调换,
* 然后返回p指针新的位置。
*
* @author 75-qj
* @version $Id: QuickSort.java, v 0.1 2010-3-4 上午11:09:35 75-qj Exp $
*/
public class QuickSort {
/**
* 主算法,运用递归
*
* @param n 待排序的数组
* @param left 数组左边序号
* @param right 数组右边序号
*/
void quicksort(int n[], int left, int right) {
int dp;
if (left < right) {
dp = partition(n, left, right);
quicksort(n, left, dp - 1);
quicksort(n, dp + 1, right); //这两个就是递归调用,分别整理53左边的数组和右边的数组
}
}
/**
* 返回中间值的位置,下面这函数就是做这个的。
*
* @param n 待排序的数组
* @param left 数组左边序号
* @param right 数组右边序号
* @return
*/
int partition(int n[], int left, int right) {
int lo, hi, pivot, t;
pivot = n[left];
lo = left - 1;
hi = right + 1;
while (lo + 1 != hi) {
if (n[lo + 1] <= pivot)
lo++;
else if (n[hi - 1] > pivot)
hi--;
else {
t = n[lo + 1];
n[++lo] = n[hi - 1];
n[--hi] = t;
}
}
n[left] = n[lo];
n[lo] = pivot;
return lo;
}
public static void main(String[] args) {
QuickSort q = new QuickSort();
int[] n = { 53, 12, 98, 63, 18, 72, 80, 46, 32, 21 };
q.quicksort(n, 0, 9);
for (int i : n) {
System.out.println(i);
}
}
}
这个是从网上找的,并非原创。只是自我总结归纳一下,望作者海涵,哈哈。
基础的算法,数据结构,我们这些java人员也不能丢弃,需要好好总结下,才能写出更好的程序。
- 排序-快速排序-Java
- java排序之快速排序
- Java排序算法 快速排序
- 快速排序(java排序)
- java 快速排序,冒泡排序
- 算法:排序----Java快速排序
- 【交换排序】快速排序--Java
- java 插入排序+快速排序
- Java 排序之 快速排序
- java排序之快速排序
- Java排序算法:快速排序
- Java排序-快速排序
- Java排序算法:快速排序
- Java排序算法--》快速排序
- JAVA排序算法---快速排序
- Java 快速排序 归并排序
- Java排序算法--快速排序
- java 冒泡排序、快速排序
- java,hibernate和数据库对应的数据类型
- pku2488 A Knight's Journey
- 【转】HP Unix 与 Websphere 集成问题解决方案
- 希望该网站能带我步入程序设计的新天地.
- java.lang.OutOfMemoryError: PermGen space及其解决方法--
- java快速排序
- 杨叙:英特尔的MeeGo+X86能否撼动Android+ARM?
- 键盘上每个键作用!!! (史上最全的)
- .NET开发资源精华收集
- 添加自动输入功能
- sx:datetimepicker的使用
- 整数和字符串之间转换
- MapReduce简介以及F#的实现
- Oracle数据库服务启动与关闭