快速排序

来源:互联网 发布:网络强国是哪几个 编辑:程序博客网 时间:2024/05/20 11:19

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

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

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

 


0 0
原创粉丝点击