排序功能中的计数器有什么问题

在我的程序中,有两个排序功能振动器和外壳排序功能,在每个排序中也有两个计数器,分别是排列数和比较数,但是由于某些原因它们不起作用,我只是不明白为什么,感谢您的帮助=)

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;
}
niaoge716 回答:排序功能中的计数器有什么问题

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3052813.html

大家都在问