永发信息网

快速排序统计比较的次数

答案:2  悬赏:30  手机版
解决时间 2021-02-18 03:36
下面这段代码怎么修改可以统计比较的次数和交换的次数?
void quickSort(int a[],int left,int right)
{
int i,j,temp;
i=left;
j=right;
temp=a[left];
if(i>=j)return;
while(i!=j)
{
while(a[j]>=temp && j>i)
{j=j-1;}
if(j>i)
{a[i]=a[j];i=i+1;}
while(a[i]<=temp && j>i)
{i=i+1;}
if(j>i)
{a[j]=a[i];j=j-1;}
}
a[i]=temp;
quickSort(a,left,i-1);
quickSort(a,i+1,right);
}
最佳答案
加一个全局变量来统计
全部回答
要统计交换次数,最简单的思考就是每次交换的时候都+1,所以找到交换函数也就找到了计数点,该程序中swap()函数就是交换函数,跟踪该函数,每次调用都计数+1,就统计到了交换次数。 #include "iostream.h" void swap(int *a,int low,int high); void quicksort(int *a,int start,int end); void output(int *a,int low,int high); //定义一个保存交换次数的全局变量 static int count=0; void swap(int *a,int low,int high) { int temp=a[low]; a[low]=a[high]; a[high]=temp; } void quicksort(int *a,int start,int end) { int balance=(a[start]+a[end])/2; int low=start; int high=end; while(low<high) { while(a[high]>=balance) high--; while(a[low]<=balance) low++; if(low<high) { //每交换一次,计数一次 swap(a,low,high); count++; } if(high==start-1) { if(a[start]>a[end]) { //同理,每交换一次,计数一次 swap(a,start,end); count++; } high=start; low=start+1; } } int t=low; low=high; high=t; if(low>=start+1) quicksort(a,start,low); if(high<=end-1) quicksort(a,high,end); } void output(int *a,int low,int high) { for(int i=low;i<=high;i++) cout<<a[i]<<" "; cout<<endl; } void main() { int arr[15]={
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
北京交通大学宿舍有空调吗?
重庆做汽车销售要求
融贵阁怎么去啊,有知道地址的么
我的电脑内存是6G,3个分区分别是1T,C盘是55
三星9100手机通讯录恢复
退休人员有什么证书可以加工资
下列活动属于简单反射的是A. 谈虎色变、望梅
河南交通职业技术学院的建筑工程管理专业在哪
闪电精灵SEO快速排名工具有效果吗
何记打面我想知道这个在什么地方
如果在我身上发了一些事情,不在我的允许下,记
我这种情况,前女友和别人跑了回来找我该怎么
【大材小用的意思】大材小用是什么意思?
城寺沟家具批发城我想知道这个在什么地方
一2十(一18)等于多少
推荐资讯
宝马525li出事故后没电冲完电打不着车怎么办
我是八一年高中毕业后就到学校代课的,由于八
鸿宾摩托配件地址有知道的么?有点事想过去
ETL是什么,形象的介绍一下
【马尔库塞】马尔库塞是()的代表人物。
女孩子发信息说;自已很少出门的,我该怎么回
【孩子不笨2】小孩不笨2的观后感作文
一个正方形的花池.周长是32米,它的面积是
【黑柳彻子巴学园的照片】“海里的东西和山里
金阳科技旗舰店地址在哪,我要去那里办事
车门掉漆铁板生锈了要怎么处理?
想买个大疆无人机,求靠谱渠道,闲鱼保险吗
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?