现在的位置: 首页 > 综合 > 正文

快速排序案例

2013年11月10日 ⁄ 综合 ⁄ 共 982字 ⁄ 字号 评论关闭
代码:
package org.ml.kspx;

public class Main {
	private static int count = 0;

	public static void main(String args[]) {
		Integer datas[] = new Integer[] { 23, 22, 12, 11, 4, 33, 21, 56, 77,
				54,
				36,
				44, 98, 10, 12 };
		System.out.print("序号\t");
		for (int i = 0; i < datas.length; i++) {
			if (i == datas.length / 2) {
				System.out.print("|\t");
			}
			System.out.print(i + "\t");
		}
		System.out.println("\n");
		quickSort(datas, 0, datas.length - 1);
	}

	/**
	 * 进行快速排序
	 * 
	 * @param datas
	 *            数组
	 * @param left
	 *            最左
	 * @param right
	 *            最右
	 */
	public static void quickSort(Integer datas[], int left, int right) {
		count++;
		System.out.print(count + "\t");
		for (int i = 0; i < datas.length; i++) {
			if (i == datas.length / 2) {
				System.out.print("|\t");
			}
			System.out.print(datas[i] + "\t");
		}
		System.out.println();
		int temp,middle;
		int i = left;
		int j = right;
		middle = datas[(i+j)/2];
		do {
			// 找左边比中间值大的数
			while (datas[i] < middle && i < right) {
				i++;
			}
			// 找右边比中间值小的数
			while (datas[j] > middle && j > left) {
				j--;
			}
			// 将左边大的数和右边小的数进行替换
			if (i <= j) {
				temp = datas[i];
				datas[i] = datas[j];
				datas[j] = temp;
				i++;
				j--;
			}
		} while (i <= j);// 两者交叉时截止
		if (i < right) {
			quickSort(datas, i, right);
		}
		if (j > left) {
			quickSort(datas, left, j);
		}
	}
}

抱歉!评论已关闭.