数据结构笔记-快速排序简单实现

来源:互联网 发布:粤语 知乎 编辑:程序博客网 时间:2024/05/18 11:27
手动写了下快速排序算法的简单实现,没有考虑当子数组小于阀值(例如nLast-nFirst < 7)时进行选择排序等优化。
#include "stdafx.h"#include <iostream>#include <time.h>void Swap( int* pFirst, int* pSecond ){int nTemp = *pFirst;*pFirst = *pSecond;*pSecond = nTemp;}int Partition( int* pArray, int nFirst, int nLast ){// Random of three pointint nMid = (nFirst + nLast)/2;if( pArray[nFirst] > pArray[nLast] ){Swap( &pArray[nFirst], &pArray[nLast] );}if(  pArray[nMid] > pArray[nLast] ){Swap( &pArray[nMid], &pArray[nLast] );}if(  pArray[nMid] > pArray[nFirst] ){Swap( &pArray[nMid], &pArray[nFirst] );}int nDivValue = pArray[nFirst];while( nFirst < nLast ){while( nFirst < nLast &&    nDivValue < pArray[nLast] ){nLast--;}if( nFirst < nLast ){pArray[nFirst] = pArray[nLast];nFirst++;}while( nFirst < nLast &&   pArray[nFirst] < nDivValue ){nFirst++;}if( nFirst < nLast){pArray[nLast] = pArray[nFirst];nLast--;}}pArray[nFirst] = nDivValue;return nFirst;}void QuickSort( int* pArray, int nFirst, int nLast ){if( nFirst < nLast ){int nDivision = Partition( pArray, nFirst, nLast );QuickSort( pArray, nFirst, nDivision - 1 );QuickSort( pArray, nDivision + 1, nLast );}}int _tmain(int argc, _TCHAR* argv[]){int nDataArray[50];srand((unsigned)time(0));for( int i = 0; i < 50; i++ ){nDataArray[i] = rand()%50;}printf("Source Array: \n");for( int i = 0; i < 50; i++ ){printf("%d, ", nDataArray[i] );if( i%10 == 9 ){printf("\n");}}QuickSort( nDataArray, 0, 49 );printf("Sorted Array: \n");for( int i = 0; i < 50; i++ ){printf("%d, ", nDataArray[i] );if( i%10 == 9 ){printf("\n");}}return 0;}
原创粉丝点击