在我的程序中,有两个排序功能振动器和外壳排序功能,在每个排序中也有两个计数器,分别是排列数和比较数,但是由于某些原因它们不起作用,我只是不明白为什么,感谢您的帮助=)
void ShakerSort(ZKR* M,int N) {
int l,r,i,k,buf;
int q = 0;
int g = 0;
k = l = 0;
r = N - 2;
while(l <= r) {
for(i = l; i <= r; i++)
if(M[i].ACADEMIC_DEGREE > M[i + 1].ACADEMIC_DEGREE) {
q++;
buf = M[i].ACADEMIC_DEGREE;
M[i].ACADEMIC_DEGREE = M[i + 1].ACADEMIC_DEGREE;
M[i + 1].ACADEMIC_DEGREE = buf;
k = i;
}
g++;
r = k - 1;
for(i = r; i >= l; i--)
if(M[i].ACADEMIC_DEGREE > M[i + 1].ACADEMIC_DEGREE) {
q++;
buf = M[i].ACADEMIC_DEGREE;
M[i].ACADEMIC_DEGREE = M[i + 1].ACADEMIC_DEGREE;
M[i + 1].ACADEMIC_DEGREE = buf;
k = i;
}
g++;
l = k + 1;
}
cout << "Number of comparisons = " << q << endl;
cout << "Number of permutations = " << g << endl;
}
// SHELL SORT
void sortShell(ZKR* M,int N) {
int g = 0;
int q = 0;
int t = clock();
int step = N / 2;
while(step > 0) {
for(int i = 0; i < (N - step); ++i) {
q++;
int j = i;
while((j >= 0) && (M[j].ACADEMIC_DEGREE > M[j + step].ACADEMIC_DEGREE)) {
int tmp = M[j].ACADEMIC_DEGREE;
M[j].ACADEMIC_DEGREE = M[j + step].ACADEMIC_DEGREE;
M[j + step].ACADEMIC_DEGREE = tmp;
j -= step;
g++;
}
}
step /= 2;
}
cout << "Number of comparisons = " << q << endl;
cout << "Number of permutations = " << g << endl;
cout << "Время сортировки = " << clock() - t << "мили cекунд" << endl;
}