快速排序如何修改能显示出趟数和比较次数以及交换次数
void quick(table *tab,int left,int right)//left和right为左右边界的下标{
int i,j,k,m,a,b;//m为排序趟数,a为排序比较次数,b为排序交换次数
if(left<right)
{
printf("第%d趟排序结果:",m);
i=left;
j=right;
tab->r[0]=tab->r[i];//以最左边第1个元素为标准进行划分,将位置i空出
while(i!=j)
{
while(tab->r[j].key>tab->r[0].key&&i<j)//从右向左找,找到第一个小于标准值的元素位置j
{
j--;
}
if(i<j)
{
k=i;
tab->r[k].key=tab->r[j].key;//将j置于左端空位置i,i向右移动,j原本位置空出
i++;
}
while(tab->r[i].key<tab->r[0].key&&i<j)//从左向右找,找到第一个大于标准值的元素位置i
{
i++;
}
if(i<j)
{
k=j;
tab->r[k].key=tab->r[i].key;//将i置于右端空位置j,j向左移动,i原本位置空出
j--;
}
}
k=i;
tab->r[k]=tab->r[0];//将标准值放入其最终位置,此时i=j
for(k=1;k<=tab->length;k++)
printf("%2d",tab->r[k].key);
printf("\n");
quick(tab,left,i-1,);//对标准值左边部分递归调用该函数
quick(tab,i+1,right);//对标准值右边部分递归调用该函数
}
printf("排序比较次数:\n",a);
printf("排序交换次数:\n",b);
}
int main()
{
int i;
table a;//定义一个结构体
table *p;
a.length=4;//length不是结构体里的,a.length是结构体里的
for(i=1;i<=a.length;i++)
scanf("%2d",&a.r[i].key);
p=&a;
printf("***************\n");
printf("排序结果:");
for(i=1;i<=a.length;i++)
printf("%d ",a.r[i].key);
printf("\n");
}