快速排序

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

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

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);
		}
	}

 


阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/DouDouLee_blog/article/details/52556647
想对作者说点什么? 我来说一句

quicksort快速排序

2009年06月09日 2KB 下载

快速排序的分析与算法实现

2008年09月28日 4KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭