首页 > 试题广场 >

若将快速排序的一次划分改写为如下形式,重写快速排序的算法,并

[问答题]

若将快速排序的一次划分改写为如下形式,重写快速排序的算法,并讨论对长度为N的记录序列进行快速排序时在最好的情况下所需进行的关键字间比较的次数(包括三者求中)。

int partition(SqList &L, int low, int high, bool ci, bool cj)
{
int i, j, m;
KeyType x;
i = s;
j = t;
m = (s+t)%2;
x = Midkey(s, m, t);             //三者取中值
ci = cj = FALSE;
while (i<j)
{
while((i<j) && (r[i].key<=x))
{
i = i + 1;
if(r[i].key<r[i-1].key)
r[i]↔r[i-1];
ci = TRUE;
}//while
while((j>i) && (r[j].key>x))
{
j = j - 1;
if(r[j].key>r[j+1].key)
{
r[j]↔r[j+1];
cj = TRUE;
}//if
if(i<j)
{
r[i]↔r[j];
if((i>s) && (r[i].key<r[i-1].key))
ci = TRUE;
if((j<t) && (r[j].key>r[j+l].key))
cj = TRUE;
}//if
}//while
}//while
return i;
}//partition

这道题你会答吗?花几分钟告诉大家答案吧!