快速排序

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

 


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

快速排序代码

  • 2016年06月14日 14:08
  • 2KB
  • 下载

简单的快速排序

  • 2015年01月23日 09:57
  • 479B
  • 下载

java实现冒泡、选择、快速排序算法

冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列...

快速排序算法

  • 2015年05月01日 16:41
  • 1KB
  • 下载

C#快速排序练习

  • 2017年06月20日 11:40
  • 30KB
  • 下载

快速排序(quicksort)

IT公司招人,无论笔试还是面试,快排基本上都会问到。通常情况下,快排实现有两个函数: void quickSort(int arr[], int left, int right); int parti...

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

  • 2015年10月30日 21:48
  • 7.57MB
  • 下载

POJ1328 -- 贪心算法和快速排序

一 。贪心策略:将雷达放置在合适的地方,使得包含的岛屿数量最多。 二。具体分析 我们采用从左到右放置雷达。假设左边第一个岛屿是A(Xa,Ya),从左到右的岛屿依次是A B C .... 我们可以计算出...

冒泡归并和快速排序java源码

  • 2016年05月11日 20:30
  • 2KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:快速排序
举报原因:
原因补充:

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