您的位置:首页 > 编程语言 > Go语言

Algorithm--快速排序

2015-03-28 18:08 246 查看
#include "stdafx.h"
#include <iostream>
#include <stack>

#define DATA_SIZE 14

void qSort2(int data[], int iDataSize)

{
if( iDataSize <= 1 )
{
return ;
}

std::stack<int> ranges;
int iLeft = 0;
int iRight = iDataSize;

ranges.push(iLeft);
ranges.push(iRight);

while( !ranges.empty() )
{
int tr = ranges.top();
iRight = ranges.top();
ranges.pop();

int tl = ranges.top();
iLeft = ranges.top();
ranges.pop();

if( iRight - iLeft <= 1 )
{
continue;
}

int pivot = data[tl];
while( tr > tl )
{
while( tr > tl && data[--tr] > pivot );
data[tl] = data;
while( tr > tl && data[++tl] < pivot );
data= data[tl];
}

data[tl] = pivot;
ranges.push(iLeft);
ranges.push(tl);
ranges.push(tl + 1);
ranges.push(iRight);
}
}

//===============================================================================
void swap(int data[], int i, int j)
{
int iTemp = data[i];
data[i] = data[j];
data[j] = iTemp;
}

int partition(int data[], int iLow, int iHigh)
{
int iPoint = data[iLow];

while ( iLow < iHigh )
{
while ( iLow < iHigh && data[iHigh] >= iPoint )
{
iHigh--;
}

swap(data, iLow, iHigh);

while ( iLow < iHigh && data[iLow] <= iPoint )
{
iLow++;
}

swap(data, iLow, iHigh);
}
return iLow;
}

void qSort1(int data[], int iLow, int iHigh)
{
int iPoint = 0;
if ( iLow < iHigh )
{
iPoint = partition(data, iLow, iHigh);
qSort1(data, iLow, iPoint - 1);
qSort1(data, iPoint + 1, iHigh);
}
}

void printResult(int data[], int iDataSize)
{
printf("排序后的结果是:");
for ( int i = 0; i < iDataSize; i++)
{
printf("%d ", data[i]);
}
printf("\n\n");
}

//快速排序--递归实现
void quickSort_recursive()
{
int data[DATA_SIZE] = {3,6,1,4,2,5,9,33,8,1,22,32,11,18};
qSort1(data, 0, DATA_SIZE - 1);
printResult(data, DATA_SIZE);
}

//快速排序--迭代实现
void quickSort_Iterative()
{
int data[DATA_SIZE] = {3,6,1,4,2,5,9,33,8,1,22,32,11,18};
qSort2(data, DATA_SIZE);
printResult(data, DATA_SIZE);
}

int _tmain(int argc, _TCHAR* argv[])
{
quickSort_Iterative();
getchar();
return 0;
}




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