当我没有两次调用时输出如何显示两次?

时间:2014-02-11 01:59:53

标签: c++

这是用turbo c ++编写的一些排序方法的代码(我知道编写的程序方法是旧的)我在冒泡排序的上升部分有一个问题。显然这两个函数是连接的(我调试了它)和所以函数被调用两次,我不知道为什么。 你能说出原因吗? 这是代码:

#include<iostream.h>
#include<conio.h>
#include<limits.h>
void display(int ar[],int sz)
{
    cout<<"Displaying arranged array\n";
    for(int i=1;i<sz;++i)
    cout<<ar[i]<<'\n';
}
void selectasd(int ar[],int sz)
{
    for(int i=1;i+1<sz;++i)
        for(int j=i+1,p=i;j<sz;++j)
            if(ar[j]<ar[p])
            {
                p=j;
                ar[i]+=ar[p];
                ar[p]=ar[i]-ar[p];
                ar[i]-=ar[p];
            }
}
void selectdsd(int ar[],int sz)
{
    for(int q=1;q+1<sz;++q)
        for(int w=q+1,p=q;w<sz;++w)
            if(ar[w]>ar[p])
            {
                p=w;
                ar[q]+=ar[p];
                ar[p]=ar[q]-ar[p];
                ar[q]-=ar[p];
            }
}
void insertasd(int arr[],int sz)
{
    arr[0]=INT_MIN;
    for(int x=2;x<sz;++x)
    {
        int tmp=arr[x];
        int k=x-1;
        while(tmp<arr[k])
        {
            arr[k+1]=arr[k];
            k--;
        }
        arr[k+1]=tmp;
    }
}
void insertdsd(int ar[],int sz)
{
    ar[0]=INT_MAX;
    for(int q=2;q<sz;++q)
    {
        int temp=ar[q];
        int k=q-1;
        while(temp>ar[k])
        {
            ar[k+1]=ar[k];
            k--;
        }
        ar[k+1]=temp;
    }
}
void bubsrtdd(int ar[],int sz)
{
    for(int q=1;q+1<sz;++q)
        for(int w=1;w+1<sz;++w)
            if(ar[w]<ar[w+1])
            {
                ar[w]+=ar[w+1];
                ar[w+1]=ar[w]-ar[w+1];
                ar[w]-=ar[w+1];
            }
}
void bubsrtad(int ar[],int sz)
{
    for(int q=1;q+1<sz;++q)
    {
        for(int w=1;w+1<sz;++w)
        {
            if(ar[w]>ar[w+1])
            {
                ar[w+1]+=ar[w];
                ar[w]=ar[w+1]-ar[w];
                ar[w+1]-=ar[w];
            }
        }
    }
}


int main()
{
    clrscr();
    int ar[20],size;
    cout<<"This is a program to arrange arrays using selection sort\nInsert the size of the array\n";
    cin>>size;
    size++;
    cout<<"Enter the elements\n";
    for(int q=1;q<size;++q)
        cin>>ar[q];
    cout<<"Menu:\n1.Selection sort\n2.Insertion sort\n3.Bubblesort\n";
    cin>>q;
    switch(q)
    {
        case 1:
            cout<<"Would you like to display it arranged in\n1.Ascending order\n2.Descending order\n";
            cin>>q;
            switch(q)
            {
                case 1:
                    selectasd(ar,size);
                    display(ar,size);
                    break;
                case 2:
                    selectdsd(ar,size);
                    display(ar,size);
                    break;
                default:cout<<"\nInvalid choice\n";
            }
            break;
        case 2:
            cout<<"Would you like to display it arraged in\n1.Ascending order\n2.Descending order\n";
            cin>>q;
            switch(q)
            {
                case 1:
                    insertasd(ar,size);
                    display(ar,size);
                    break;
                case 2:
                    insertdsd(ar,size);
                    display(ar,size);
                    break;
                default:cout<<"\nInvalid choice\n";
            }
            break;
        case 3: {
                cout<<"Would you like to display the array in \n1.ascending order \n2.descending order\n";
                cin>>q;
                switch(q)
                {
                    case 1: {
                        bubsrtad(ar,size);                      display(ar,size);
                        display(ar,size);
                        break;
                        }
                    case 2: {
                        bubsrtdd(ar,size);
                        display(ar,size);
                        break;
                        }
                    default:cout<<"\nINVALID CHOICE\n";
                }
            }
            break;
        default:cout<<"\nInvalid choice\n";
    }
    getch();
    return 0;
}

1 个答案:

答案 0 :(得分:2)

对我来说,你在这里两次调用显示器:

    case 3: {
            cout<<"Would you like to display the array in \n1.ascending order \n2.descending order\n";
            cin>>q;
            switch(q)
            {
                case 1: {
                    bubsrtad(ar,size);                      display(ar,size);
                    display(ar,size);
                    break;
                    }