[英]Error in counting number of comparisons in selection sort
我想計算選擇排序算法中比較的次數:
在通常的算法中,我引入了一個計數變量cont
,並將其初始化為cont=0
。
代碼是:
void selectionSort(int a[],int n)
{
int i,j,min,cont;
int tmp;
cont=0;
for(i=0;i<n;i++)
{
min=i;
for(j=i+1;j<=n;j++)
{
if(a[j]<a[min])
{min=j;
}
cont=cont+1;
}
tmp=a[i];
a[i]=a[min];
a[min]=tmp;
}
}
問題是,當我將其應用於維數為4的向量時,說a[1]=2,a[2]=1,a[3]=4,a[4]=3
然后print("%d",cont)
, 輸出為4200958
,比較結果太多了,那么這里的錯誤在哪里?
編輯:正如@Arnold所指出的,我已經糾正了向量的錯誤拼寫初始化,現在輸出為4,這也是不正確的,我期望結果為6。那么這里的錯誤在哪里?
*下面的完整代碼編輯 :*
void selectionSort(int a[],int n)
{
int i,j,min,cont;
int tmp;
cont=0;
for(i=0;i<n;i++)
{
min=i;
for(j=i+1;j<=n;j++)
{
if(a[j]<a[min])
{min=j;
}
cont=cont+1;
}
tmp=a[i];
a[i]=a[min];
a[min]=tmp;
}
}
int main()
{
int a[4],cont;
cont=0;
a[0]=2;
a[1]=1;
a[2]=4;
a[3]=3;
selectionSort(a,4);
printf("%d",cont);
return 0;
}
只需將第二個循環從:
for(j=i+1;j<=n;j++)
至:
for(j=i+1;j<n;j++)
您應該從條件中刪除等號。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.