快速排序(java)笔记

package test;

public class QuickSort {
	
	//比较的时候感觉和二叉树有点类似。
	public static void quickCore(int[] arr, int low, int hight) {
		//判断数组是否查询完毕
		if (low >= hight) {
			return;
		}
		//临时数字储存关键字(对比字段)
		int temp = arr[low];
		//与关键字对比,先从后往前扫描,遇到比关键字小的,就将这次比较的值填充到指针开始的地方
		//与关键字对比,从前往后扫描,遇到比关键字大的,就将这次比较的值填充到指针结束的地方
		//填坑操作最后一步就是把最初那个临时的数字放进最后一个坑
		int i = hight, j = low;
		while (i > j) {
			while (i > j && arr[i] >= temp) {
				i--;
			}
			if (i > j) {
				arr[j] = arr[i];
				j++;
			}
			while (i > j && arr[j] <= temp) {
				j++;
			}
			if (i > j) {
				arr[i] = arr[j];
				i--;
			}
		}
		arr[i] = temp;
		//分而治之(将关键字左边的数组循环快排)
		quickCore(arr, low, i - 1);
		//分而治之(将关键字右边的数组循环快排)
		quickCore(arr, j + 1, hight);
	}

	// 排序的入口
	public static int[] sort(int arr[]) {
		int low = 0;
		int hight = arr.length - 1;
		quickCore(arr, low, hight);
		return arr;
	}

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章