快速排序

原创 2016年09月16日 21:49:30

采用“分而治之”的思想,将大的分为小的,小的再拆分为更小的。

原理:对于给定的一组记录,通过一趟排序,将原序列分为两部分,其中一部分的所有记录均比另一部分小;再依次对前后两部分的记录进行快速排序,递归该过程。

1、拆分

拆分算法由两个指针开始工作,两个指针分别指向数组两头(非C++中的指针),leftPtr向右移动,直至遇到比pivot大的,暂停;rightPtr向左移动,直至遇到比pivot小的,暂停;两者交换。

leftPtr初始化时是在第一个数据项的左边一位,rightPtr初始化是在最后一个数据项的右边一位,因为它们工作之前,都要分别加一和减一:

while(theArray[++leftPtr]<pivot)//find bigger one
;

while(theArray[--rightPtr]>pivot)//find smaller one
;
swap(leftPtr,rightPtr);//swap elements











拆分算法:

public int partionIt(int left,int right,long pivot){
		int leftPtr = left - 1;
		int rightPtr = right + 1;
		while(true){
			while(leftPtr < right && theArray[++leftPtr] < pivot)
				;
			while(rightPtr > left && theArray[--rightPtr] > pivot)
				;
			if(leftPtr >= rightPtr)
				break;
			else
				swap(leftPtr,rightPtr);
		}
		return leftPtr;
	}

交换:

public void swap(int dex1,int dex2){
		long temp;
		temp = theArray[dex1];
		theArray[dex1] = theArray[dex2];
		theArray[dex2] = temp;
	}

2、快速排序:

public void quickSort(int left,int right){
		if(right-left<=0)
			return;
		else{
			int partition = partionIt(left,right);
			quickSort(left,partition-1);
			quickSort(partition+1,right);
		}
	}

 


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

C#快速排序练习

  • 2017-06-20 11:40
  • 30KB
  • 下载

算法导论二:快速排序

快速排序采用的是分治策略,其方法是将一个数组a[p,r]划分为两个子数组a[p,q-1],a[q+1,r],使其左子数组元素中的元素均小于等于a[q],右子数组元素均大于a[q],并递归划分两个子数组...

快速排序代码

简单的快速排序

  • 2015-01-23 09:57
  • 479B
  • 下载

快速排序

上一节的冒泡排序可以说是我们学习第一个真正的排序算法,并且解决了桶排序浪费空间的问题,但在算法的执行效率上却牺牲了很多,它的时间复杂度达到了O(N2)。假如我们的计算机每秒钟可以运行10亿次,那么对1...

快速排序原创数据(20组)

  • 2015-10-30 21:48
  • 7.57MB
  • 下载

第一篇博客——快速排序

快速排序

快速排序算法

内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)