您的位置:首页 > 其它

快速排序

2007-04-22 22:36 267 查看
最近比较有空,想熟悉一下算法,有一段时间没有写程序了。

基本思想:
在当前无序区Array[1..H]中任取一个数据元素(这里用中间的元素)作为比较的"基准"(不妨记为X),用此基准将当前无序区划分为左右两个较小的无序区:Array[1..I-1]和Array[I+1..H],且左边的无序子区中数据元素均小于等于基准元素,右边的无序子区中数据元素均大于等于基准元素,而基准X则位于最终排序的位置上,即Array[1..I-1]≤X.Key≤Array[I+1..H](1≤I≤H),当Array[1..I-1]和Array[I+1..H]均非空时,分别对它们进行上述的划分过程,直至所有无序子区中的数据元素均已排序为止。

快速排序实现代码:


template<class T>


void quickSort(T Array[], int nSize)




...{


run(Array, 0, nSize-1);


}




template<class T>


void run(T Array[], int nleft, int nright)




...{


int i = nleft, j = nright;


int mid = (nleft + nright)/2;


T x = Array[mid];







do ...{


while((i < nright) && (Array[i] < x)) i++; //从左到右查找第1个大于等于x的下标





while((j > nleft ) && (Array[j] > x)) j--; //从右到左查找第1个小于等于x的下标





if(i <= j)




...{


swap(Array[i], Array[j]);


i++;


j--;


}


} while(i <= j);





if(j > nleft) //sort Array[nleft...j];


run(Array, nleft, j);


if(i < nright) //sort Array[i...nright];


run(Array, i, nright);


}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: