使用java实现快速排序的一个简单例子

public static void main(String[] args) {
		
		// 测试排序
		Random r = new Random();
		int arr[] = new int[10];
		for(int i=0;i<10;i++) {
			arr[i] = r.nextInt(100);
		}
		
		System.out.println("before sort");
		for(int i:arr) {
			System.out.print(i+",");
		}
		
		fastSort(arr, 0, arr.length-1);
		
		System.out.println("after sort");
		for(int i:arr) {
			System.out.print(i+",");
		}
		
	}
	
	public static void fastSort(int[] arr, int left, int right) {
		/**
		 * i 从左侧查找时的索引
		 * j 从右侧查找时的索引
		 * tmp 交换数据时,临时变量
		 * baseVal 交换比较的基准值
		 */
		int i, j, tmp, baseVal;

		if (left > right) {
			return;
		}

		baseVal = arr[left];
		i = left;
		j = right;

		while (i != j) {
			// i和j不相同,则进行下面的操作
			// 要先从右向左找
			while (arr[j] >= baseVal && i < j) {
				// 直到找到比baseVal大的值为止
				j--;
			}
			// 再从左向右找
			while (arr[i] <= baseVal && i < j) {
				// 直到找到比baseVal小的值为止
				i++;
			}

			// 交换两个数在数组中的位置
			if (i < j) {
				tmp = arr[i];
				arr[i] = arr[j];
				arr[j] = tmp;
			}
		}
		// 最终将基准归为
		arr[left] = arr[i];
		arr[i] = baseVal;
		
		// 递归获取左侧和右侧各排序结果
		fastSort(arr, left, i - 1);
		fastSort(arr, i + 1, right);
	}

  

猜你喜欢

转载自www.cnblogs.com/qq931399960/p/9550026.html