回 帖 发 新 帖 刷新版面

主题:求教:为何经过冒泡排序后,数组首元素的值会改变?

#include<iostream>
#include<iomanip>
#include <time.h> 
#include<cmath>
using namespace std;

void swap(int *const p1,int *const p2)
{
    int t;
    t = *p1;
    *p1 = *p2;
    *p2 = t;
}

void bubble(int *arr,const int n)
{
    int i,j;
    for(j = 0;j < n;j++)
        for(i = 0;i < n - j;i++)
            if(arr[i] > arr[i+1])
                swap(&arr[i],&arr[i+1]);
}

void output(int *arr,const int n)
{
    int i;
    cout << "黑桃: ";
    for(i = 0;i < n;i++)
    {
        if(arr[i] < 14)
            cout << setw(3) << arr[i];
    }
    cout <<endl;
    cout << "红桃: ";        
    for(i = 0;i < n;i++)
    {
        if(arr[i] < 27 && arr[i] > 13)
            cout << setw(3) << arr[i] - 13;
    }
    cout <<endl;
    cout << "梅花: ";
    for(i = 0;i < n;i++)
    {
        if(arr[i] < 40 && arr[i] > 26)
            cout << setw(3) << arr[i] - 26;
    }
    cout <<endl;
    cout << "方片: ";
    for(i = 0;i < n;i++)
    {
        if(arr[i] < 53 && arr[i] > 39)
            cout << setw(3) << arr[i] - 39;
    }    
    cout <<endl;
    cout <<endl;
}


class CardGame
{
public:
    virtual void deal()
    {}
};

class Bridge : public CardGame
{
private:
    int a[13];
    int b[13];
    int c[13];
    int d[13];
public:
    void deal()
    {
        int i,j,arr[52];
        srand( time( NULL ));
        for(i = 0;i < 52;i++)
        {
L:            arr[i] = rand() % 52 + 1;
            j = i - 1;
            while(j > -1)
            {
                if(arr[i] == arr[j])
                    goto L;
                j--;
            }
            cout << arr[i] <<endl;
            if((i+1)%13 == 0)
                cout<<endl;
        }
        for(i = 0;i < 13;i++)
            a[i] = arr[i];
        for(i = 0;i < 13;i++)
            b[i] = arr[i + 13];    
        for(i = 0;i < 13;i++)
            c[i] = arr[i + 26];    
        for(i = 0;i < 13;i++)
            d[i] = arr[i + 39];
        cout << "  d  "<<endl;
        for(i=0;i<13;i++)cout<<setw(3)<<d[i];//这里d[0]的值没变
        cout<<endl;
        bubble(a,13);
        bubble(b,13);
        bubble(c,13);//经过我测试,这里d[0]的值就已经变了,但数组d还未排序啊!
        bubble(d,13);
        cout << "  d  "<<endl;
        for(i=0;i<13;i++)cout<<setw(3)<<d[i];//这里d[0]的值就跟着变了,为什么?
        cout<<endl;
           cout << "玩家一的牌为: " <<endl;
        output(a,13);
        cout << "玩家二的牌为: " <<endl;
        output(b,13);
        cout << "玩家三的牌为: " <<endl;
        output(c,13);
        cout << "玩家四的牌为: " <<endl;
        output(d,13);
    }
};

希望大虾能具体说明原因

回复列表 (共6个回复)

沙发

void bubble(int *arr,const int n)
{
    int i,j;
    for(j = 0;j < n;j++)
        for(i = 0;i < n - j;i++)
            if(arr[i] > arr[i+1])
                swap(&arr[i],&arr[i+1]);
}
函数有错误
我改 的
void bubble(int *arr,const int n)
{
    int i,j;
    for(j = 0;j < n;j++)
        for(i = 0;i < j;i++)
            if(arr[i] > arr[i+1])
                swap(&arr[i],&arr[i+1]);
}

板凳

楼上的压根就没排序。。。

不要唬人啥。。。

3 楼

[code]
void swap(int *const p1,int *const p2)
{
    int t(*p1);
    *p1=*p2;
    *p2=t;
}

void bubble(int *arr,const int n)
{
    for(int i(0);i<n-1;++i){
        for(int j(i);j<n;++j){
            if(arr[i]>arr[j]){
                swap(&arr[i],&arr[j]);
            }
        }
    }
}[/code]

4 楼

经过测试可以排序

int
main(void)
{
    int a[10]={10,9,8,7,6,5,4,3,2,1};
    for(int i(0);i<10;++i){
        fprintf(stdout,"%d\t",a[i]);
    }
    bubble(a,10);
    for(int i(0);i<10;++i){
        fprintf(stdout,"%d\t",a[i]);
    }
    
    system("pause");
    return 0;
}

5 楼

排序是可以实现

但是我在排甲数组的时候,为什么乙数组的首元素值会变呢

6 楼

哦明白了
冒泡的算法我写错了

我来回复

您尚未登录,请登录后再回复。点此登录或注册