读书人

请教快速排序如何变成递减输出啊

发布时间: 2012-03-09 21:42:54 作者: rapoo

请问快速排序怎么变成递减输出啊?
#include <iostream>
#include <iomanip>
#include <stdio.h>
#include <string>
using namespace std;

void QuickSort(int *pData, int left, int right)
{
int i, j;
int middle, iTemp;
i = left;
j = right;

middle = pData[(left + right) / 2]; //求中间值
do
{
while ((pData[i] < middle) && (i < right)) //从左扫描大于中值的数
i++;
while ((pData[j] > middle) && (j > left)) //从右扫描小于中值的数
j--;
if (i <= j) //找到了一对值
{
//交换
iTemp = pData[i];
pData[i] = pData[j];
pData[j] = iTemp;
i++;
j--;
}
} while (i <= j) ; //如果两边扫描的下标交错,就停止(完成一次)

//当左边部分有值(left <j),递归左半边

if(left <j)
QuickSort (pData,left,j);
//当右边部分有值(right> i),递归右半边
if(right> i)
QuickSort (pData,i,right);
}


void main()
{
int data[20]={34,43,67,6765,12,0,42,4,56,3,99,222,1,123,45,42,23,10,78,35};
QuickSort(data,0,19);
for(int i=0;i <20;i++)
{
cout < <data[i] < < ' ';
}

}

我改成
while ((pData[i] > middle) && (i < right)) //从左扫描大于中值的数
i++;
while ((pData[j] <middle) && (j > left)) //从右扫描小于中值的数
怎么没有成功排序?



[解决办法]
程序本身没有任何问题,测试结果也和上面一样没有出错,不知道楼主用的是什么编译器..................

读书人网 >C++

热点推荐