/*=======================================================
* 函 数 名: Quick_sort(int , const int )
* 参数说明: Value 为传入的数组
iCount 为数组的个数
* 功能描述: 将 Value 按照从小到大的顺序排序
* 返 回 值: void
=======================================================*/
void Quick_sort(int Value[], const int iCount)
{
vector<int> vecFlag_low; // 载入低位的位置
vector<int> vecFlag_high; // 载入高位的位置
int iLow_increase; // 向上查找的位置
int iHigh_decrease; // 向下查找的位置
int iLow; // 标记低位的位置
int iHigh; // 标记高位的位置
int iTemp; // 低位的临时存储
vecFlag_low.push_back(0);
vecFlag_high.push_back(iCount - 1);
while(!(vecFlag_low.empty()||vecFlag_high.empty()))
{
iLow = iLow_increase = vecFlag_low.back();
iHigh = iHigh_decrease = vecFlag_high.back();
vecFlag_low.pop_back();
vecFlag_high.pop_back();
iTemp = Value[iLow_increase];
while(iLow_increase < iHigh_decrease) // 一趟查找
{
while((Value[iHigh_decrease] > iTemp)
&&(iLow_increase < iHigh_decrease))
{
iHigh_decrease--; // 向下寻找
}
if(iLow_increase < iHigh_decrease)
{
Value[iLow_increase++] = Value[iHigh_decrease];
}
while((Value[iLow_increase] < iTemp)
&&(iLow_increase < iHigh_decrease))
{
iLow_increase++; // 向上寻找
}
if(iLow_increase < iHigh_decrease)
{
Value[iHigh_decrease--]=Value[iLow_increase];
}
}
Value[iLow_increase] = iTemp; // 将空缺的位置传入原低位的数值
if(iLow_increase - 1 > iLow) // 缩小寻找范围
{
vecFlag_low.push_back(iLow);
vecFlag_high.push_back(iLow_increase - 1);
}
if(iHigh > iLow_increase + 1)
{
vecFlag_low.push_back(iLow_increase + 1);
vecFlag_high.push_back(iHigh);
}
}
}