码迷,mamicode.com
首页 > 编程语言 > 详细

小白眼里的快速排序

时间:2018-03-19 23:33:08      阅读:236      评论:0      收藏:0      [点我收藏+]

标签:索引   分享图片   png   gpo   代码   info   tar   一个   技术分享   

 

1.快速排序的基本思想

1.从数组中选取一个数为基准数,一般是选取第一个为基准数

2.其余数据和这个基准数进行比较,大的放一边,小的放在另一边

3.基准数两边的数组再重复上述操作

2.以例为证

1.初始化数组如下

 技术分享图片

2.然后进行替换

过程如下:

(1)对数组进行从小到大排列,现在我们选取第一个数17为基准数,从最右边开始比(这里一定要从最右边开始,要不自己试试会怎样),右边第一个数是14小于17,所以索引保持在14的位置准备替换,然后从左往右找3小于17不用替换,索引向右移动一位,发现62大于17,停止查找并和之前的14替换,第一次替换结果如下。

第一对数据替换后结果

 技术分享图片

(2)现在进行第二对数据替换,62所在索引向左移动一位,发现值为1,小于17,停止查找并等待替换,4所在索引向右移动一位,值为4小于17,继续向右移动一位,值为56大于17,和之前的1进行替换,第二次替换的结果如下。

第二对数据替换后结果

技术分享图片

(3)第三对数据替换后结果

 技术分享图片

 (4)继续移动右侧索引,发现右侧索和左侧索引重合了,到达了13的位置,这时就用13和基准数进行交换。

  第四对数据替换之后

 技术分享图片

 (5)然后17左边为一个数组,17右边为一个数组,分别执行上述操作,最后结果如下:

技术分享图片

3.上代码

private static void quickSort(int arr[],int low,int high) {
		int l = low;
		int h = high;
		int target = arr[low];

		while (l < h) {
			while (l < h && arr[h] >= target)
				h--;
			if (l < h) {
				int temp = arr[h];
				arr[h] = arr[l];
				arr[l] = temp;
				l++;
			}
			while (l < h && arr[l] <= target)
				l++;
			if (l < h) {
				int temp = arr[h];
				arr[h] = arr[l];
				arr[l] = temp;
				h--;
			}
		}
		
		if (l > low)
			quickSort(arr, low, l - 1);
		if (h < high)
			quickSort(arr, l + 1, high);
}

  

  

小白眼里的快速排序

标签:索引   分享图片   png   gpo   代码   info   tar   一个   技术分享   

原文地址:https://www.cnblogs.com/zliprogram/p/8605650.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!