快速排序2

这个排序算法效率比较低,但是比前面那种容易理解!
package com.wlh;

public class QuickSort {

	public static void qucikpass(int[] r, int left, int right) {
		int i, j;
		int middle,temp;
		i = left;
		j = right;
		middle = r[i];
		while (i < j) {
			 //从右向左找小于middle的数组值
			while (r[j] >= middle && i < j)
				j--;
			//i和j没有碰到一起
			if (i < j) {
				//从右向左找到小于middle的数组值,然后r[i],r[j]位置上的数组值交换
				temp=r[i];
				r[i] = r[j];
				r[j]=temp;
				i++;
				//从左向右找大于middle的数组值
				while (r[i] <= middle && i < j)
					i++;
				if (i < j) {
					//从左向右找大于middle的数组值,然后r[i],r[j]位置上的数组值交换
					temp=r[i];
					r[i] = r[j];
					r[j]=temp;
					j--;
				}
			}
		}
		
		
		//递归调用次函数,对r[i]左边的数组进行排序
		if (left < i) {
			qucikpass(r, 0, i);
		}

		//递归调用次函数,对r[i]右边的数组进行排序
		if (right > j) {
			qucikpass(r, j +1, right);
		}
	}

	public static void main(String[] args) {
		
		//int[] pData = new int[] { 35, 40, 45, 10, 15 };
			int[] pData = new int[10];
		for (int i = 0; i < 10; i++){
			pData[i] = (int) (Math.random() * 100);
			System.out.print(pData[i] + " ");
		}
		System.out.println("\n======================== ");
		QuickSort3.qucikpass(pData, 0, pData.length - 1);
		for (int i = 0; i < pData.length; i++)
			System.out.print(pData[i] + " ");
	}
}

你可能感兴趣的:(算法,J#)