我有一个带有Selection Sort的程序,它按升序和降序生成和排序随机数。问题在于计算比较。它给出了正确的数字,直到10 0000个数字,但是当我生成100k数字时,它返回的值比公式中的值错误。 这是我的选择排序代码。
void select (int n, float *pole2,int *compare,int *move,char decide)
{
*compare=0; // number of comparisons
*move=0;
int i;
for (i = 0; i < n - 1; i++)
{
int j, poz_min;
float temp,min;
min = pole2[i];
poz_min = i;//
for (j = i+1; j < n; j++)
{
*compare+=1;
if (pole2[j] < min)
{
min = pole2[j];
*move+=1;
poz_min=j;
}
}
temp = pole2[i];
pole2[i] = pole2[poz_min];
pole2[poz_min] = temp;
*move+=3;
}
// Writing to a binary file
FILE *fw;
fw = fopen("Select_SORT.DAT", "wb+");
int z;
for(z = 0; z < n; z++)
{
fwrite(&pole2[z], sizeof(pole2[z]), 1, fw);
}
fclose(fw);
fseek(fw, 0, SEEK_SET);
}
答案 0 :(得分:1)
那是因为100K
实际上有10^10
次比较。系统上的int
无法容纳它。尝试使用long long
是安全的。还要比较INT_MAX
的内容。你会明白的。
对于n
元素,在选择排序的情况下,有O(n^2)
(准确n*(n-1)/2
)比较。
答案 1 :(得分:0)
乍一看int *compare
能够包含最大值65536。
试试long
。