快速排序的C++实现
2010-08-05 12:22
351 查看
在当前无序区间R[a..b]中任取一个数据元素作为比较的"基准值"(不妨记为X),
用此基准将当前无序区间划分为左右两个较小的无序区间:
R[a..n- 1]和R[n+1..b],且:
左边的无序子区间中数据元素均小于等于基准元素,
右边的无序子区间中数据元素均大于等于基准元素,
而基准X则位于最终排序的位置n上,即R[a..n-1]≤X≤R[n+1..b](a≤n≤b),
当R[a..n-1]和R[n+1..b]均非空时,
分别对它们进行上述的划分过程,
直至所有无序子区中的数据元素均已排序为止。
用此基准将当前无序区间划分为左右两个较小的无序区间:
R[a..n- 1]和R[n+1..b],且:
左边的无序子区间中数据元素均小于等于基准元素,
右边的无序子区间中数据元素均大于等于基准元素,
而基准X则位于最终排序的位置n上,即R[a..n-1]≤X≤R[n+1..b](a≤n≤b),
当R[a..n-1]和R[n+1..b]均非空时,
分别对它们进行上述的划分过程,
直至所有无序子区中的数据元素均已排序为止。
#include <stdio.h> #include <stdlib.h> #include <time.h> void Printf(int *nArray, int nBPos, int nEPos) { int nCnt = 0; for (int i=nBPos; i<=nEPos; ++i) { printf("%6d ", nArray[i]); if ( (++nCnt % 10) == 0) { printf("/n/n"); } } printf("/n/n"); } int Parttion(int *nArray, int nBeginPos, int nEndPos) { int nI = nBeginPos; int nJ = nEndPos; int nBaseElent = nArray[nBeginPos]; for ( ; nI != nJ ;) { // 从右到左扫描,查找第一个小于nBaseElent的元素 while ( (nArray[nJ] >= nBaseElent) && ( nI < nJ ) ) { nJ -= 1; } if ( nI < nJ ) { int nTmp = nArray[nI]; nArray[nI] = nArray[nJ]; nArray[nJ] = nTmp; } // 从当前位置开始从左到右扫描,查找第一个大于nBaseElent的元素 while ( (nArray[nI] <= nBaseElent ) && ( nI < nJ ) ) { nI += 1; } if ( nI < nJ ) { int nTmp = nArray[nJ]; nArray[nJ] = nArray[nI]; nArray[nI] = nTmp; nJ -= 1; } } return nI; } void QuickSort(int *nArray, int nBeginPos, int nEndPos) { if ( nBeginPos < nEndPos ) { int nBasePos = Parttion( nArray, nBeginPos, nEndPos); QuickSort( nArray, nBeginPos, nBasePos-1); QuickSort( nArray, nBasePos+1, nEndPos); } } #define MAXLEN 20 int main() { ::srand( (unsigned)::time( NULL ) ); int nArrayPtr[MAXLEN] = {0}; for ( int i=0; i<MAXLEN; ++i) { nArrayPtr[i] = ::rand(); } int nBasePos = 0; printf("Begin Sort : /r/n"); Printf(nArrayPtr,0, MAXLEN-1); QuickSort(nArrayPtr,0,MAXLEN-1); printf("End Sort : /r/n"); Printf(nArrayPtr,0, MAXLEN-1); system("pause"); return 0; }
相关文章推荐
- C++ 快速排序 递归实现
- 快速排序的C++与R语言实现
- 几种排序算法的C++实现——快速排序、堆排序、基数排序
- 排序算法---快速排序c++实现
- 利用随机化快速排序求带权中位数C++实现
- 快速排序C++实现
- 快速排序C++实现
- 快速排序C++实现
- C++实现几种常用的时间复杂度为O(nlogn)的排序方法:归并排序、快速排序、堆排序、希尔排序
- 快速排序(伪代码 c/c++ python 实现)
- C++ 快速排序QuickSort的实现
- 快速排序C++实现
- c++实现数据结构中的各种排序方法:直接插入、选择,归并、冒泡、快速、堆排序、shell排序
- C++实现快速排序,递归写法
- 快速排序C++实现
- 快速排序之所有的c/c++的实现
- 利用c++模板实现快速排序
- 交换排序——冒泡排序和快速排序,C++代码实现
- 快速排序c++实现
- 算法导论第七章快速排序的C++实现