`
xuelianbobo
  • 浏览: 172237 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

java快速排序

阅读更多
/***
 * 快速排序简单实现
 * 
 * @author bobo
 * 
 */
public class QuickSort {
	public static void main(String[] args) {
		/**
		 * 快速排序的逻辑是:在所有元素中取一个标尺(一般是第一个)将待排序序列分成两组 一组的元素 都小于这个标尺,另一组都大于或等于这个标尺
		 * 然后对每个部分再进行递归调用,直到全部完成
		 */
		int[] a = { 9,8,7,6,5,4,3,2,1,1,2,3,4,5,6,7,8,9};
		show(a);
		quickSort(a, 0, a.length - 1);
		show(a);
	}

	/***
	 * 快速排序的核心方法
	 * 
	 * @param a
	 *            待排序的序列
	 * @param begin
	 *            待排序列子序列起始位置索引
	 * @param end
	 *            待排序列子序列结束位置索引
	 */
	private static void quickSort(int[] a, int begin, int end) {
		System.out.println(begin + ">" + end);
		// 若没有必要进行排序则返回
		if (end - begin <= 1) {
			return;
		}
		// 定义此次排序的标尺元素 此处选择开始位置为标尺元素 不要些a[0] 因为要多次递归调用
		int x = a[begin];
		// 定义左右的指针
		int p1 = begin;// 左指针
		int p2 = end;// 右指针
		// 定义比较方向 true表示向右 false表示向左
		boolean dr = true;
		// 进行循环操作,条件是两个指针不相撞
		L1: while (p1 < p2) {
			// 如果方向向右
			if (dr) {
				// 从p2>p1之间进行循环查找可以进行替换的数值
				for (int i = p2; i > p1; i--) {
					if (a[i] <= x) {
						a[p1] = a[i];
						p1++;// 进行自增 左指针右移
						dr = !dr;// 转换方向
						p2 = i;// 右指针指向i
						continue L1; // 下一步循环
					}
				}
				// 如果能执行到这一步 说明没有找到小于标尺的元素,则说明序列本身就ok 则进行如下赋值
				p2 = p1;
			} else {
				// 如果方向向左
				// 从p1>p2之间进行循环查找可以进行替换的数值
				for (int i = p1; i < p2; i++) {
					if (a[i] > x) {
						a[p2] = a[i];
						p2--;// 右指针自减
						dr = !dr;// 转换方向
						p1 = i;
						continue L1;
					}
					// 如果能执行到这一步 说明没有找到小于标尺的元素,则说明序列本身就ok 则进行如下赋值
					p1 = p2;
				}
			}

		}
		// 进行递归调用
		a[p1] = x;// 填充空白处
		show(a, begin, end,p1);
		quickSort(a, begin, p1 - 1);
		quickSort(a, p1 + 1, end);

	}

	private static void show(int[] a, int begin, int end, int p1) {
		for (int i = begin; i < end + 1; i++) {
			if (i==p1) {
				System.out.print("["+a[i]+"]" + " ");
			}else {
				System.out.print(a[i]+" ");
			}
			
		}
		System.out.println();
	}

	/**
	 * 显示 数组元素
	 * 
	 * @param a
	 */
	private static void show(int[] a) {
		for (int i : a) {
			System.out.print(i + " ");
		}
		System.out.println();
	}
}

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics