快速排序法学习心得

public class Test {
	public static void main(String args[]) {
		int[] a = { 10, 32, 1, 9, 5, 7, 12, 0, 4, 3 };
		System.out.print("排序前: ");
		for (int i = 0; i < a.length; i++)
			System.out.print("\t" + a[i]);
		System.out.println();// 换行
		quickSort(a,0,a.length-1); // 希尔排序
		System.out.print("排序后: ");
		for (int i = 0; i < a.length; i++)
			System.out.print("\t" + a[i]);
	}
	/**
	 * 快速排序算法思想:快速排序是对冒泡排序的一种改进,它不再是对相邻元素进行比较大小,而是与一个基准元素进行比较。
	 * 每完成一轮比较,不仅基准元素的位置已经确定,其他元素的大概位置也确定了(位于基准元素左侧还是右侧),因而具有较高的效率。
	 * 以升序排列为例,快速排序法取数组中的任意元素(习惯取第一个)为基准,将原数组分成两部分。
	 * 大于基准元素的部分全部位于基准元素右侧,小于基准元素的部分全部位于基准元素左侧。
	 * 然后继续按照这样的思想将左右两侧的数组分别取新的基准元素分成两部分,直到最终排序完成。
	 * 快速排序算法的实现:以升序排列为例,取开端的元素为基准元素。用一个临时变量保存基准元素temp=array[0]。
	 * 从数组末端向前遍历,找到第一个小于temp的元素,把它赋值给基准元素所在位置的元素。
	 * 然后从数组前端向后遍历,找到第一个大于temp的元素,把它赋值给向前遍历时停下来的位置的元素。
	 * 重复“从后向前找一个小于temp的元素,赋值给从前向后遍历停止时的位置,从前向后找一个大于temp的元素,赋值给从后向前遍历停止时的位置”这一过程。
	 * 需要注意,无论向前还是向后遍历,都要保证向前遍历时的下标小于向后遍历时的下标,否则应该停止遍历。
	 * 第一趟比较全部完成之后,对于分成的两个数组,递归调用相同的方法继续比较,直到数组不可再分,得到的就是最终结果
	 */
	public static void quickSort(int[] array,int low,int high) {
		if (low < high) {
			int split = sort(array, low, high);//把a数组中下标从low到high的部分用快速排序的思想进行一次排序,返回基准元素最终的位置(索引)
			quickSort(array, low, split - 1);//一次排序后左侧的部分重新按照快速排序的思想排序
			quickSort(array, split + 1, high);//一次排序后右侧的部分重新按照快速排序的思想排序
		}
		
	}
	public static int sort(int[] array,int low,int high){
		int temp = array[low];
		while (low < high) {
			while (low < high && array[high] >= temp)//从后向前查找第一个小于temp的元素
				high--;
			array[low] = array[high];
			while (low < high && array[low] <= temp)//从前向后查找第一个大于temp的元素
				low++;
			array[high] = array[low];
		}
		array[low] = temp;//一次排序完成后定位基准元素的位置
		return low;//返回基准元素的位置坐标,用于递归排序基准元素左右的数组
	}
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值