2 qq 34614890 qq_34614890 于 2016.05.04 10:09 提问

选择排序法 哪里有错误啊???????????

//================================================================//
//对数组a[0:8]=[3,2,6,5,9,4,7,1,8]进行排序--选择排序法 //
//================================================================//
#define swap(x,y) {int z;z=x;x=y;y=z;}

void outputarray(int a[], int n)
{
int i;
for (i = 0;i < n;i++)
{cout << a[i];}
cout << endl;
}
int indexofmax(int a[],int n)
{
int i;
int indexofmax = 0;
for (i = 1;i < n;i++)
{
if (a[indexofmax] < a[i])
{
indexofmax = i;
}
}

    return indexofmax;

}

int main(int n)
{
int a[] = { 3,2,6,5,9,4,7,1,8 };
for (int size = n=9;size > 1;size--)
{
int j = indexofmax(a, size);
swap(a[j], a[size - 1]);
//int x = a[j];a[j] = a[size - 1];a[size - 1] = x;
}
outputarray[a, 9];

/*int i;
for (i = 0;i < 9;i++)
{
    cout << a[i];
}
cout << endl;*/

}

9个回答

qq_34614890
qq_34614890   2016.05.04 10:14

大神呢

qq_34614890
qq_34614890   2016.05.04 10:13

大神呢

CSDNXIAON
CSDNXIAON   2016.05.04 10:22

选择排序法
选择排序法
选择排序法
----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为你提供参考答案,编程尚未成功,同志仍需努力!

wjhyxr
wjhyxr   2016.05.04 10:33

swap 函数返回时,两个值没有交换

duye_csdn
duye_csdn   2016.05.04 10:51

楼上说的不错,传递参数时你只传了值,这样做改变不了原地址中的数据,你应该传入原参数的地址,即swap(&x,&y)

founderznd
founderznd   2016.05.04 11:27

同意楼上
或者取消swap函数
直接利用你注释掉的代码也可以

lai_li
lai_li   2016.05.04 11:33

经过测试,可以排序,并不是swap不能交换,swap是可以交换,另外**函数式宏定义的效率比较低,而且不检查类型**,建议你还是写正规的函数吧。

另外,outputarray(a, 9);主函数中的这句代码,测试的时候一直报错,但是你的写法是正确的,搞了好久依旧没明白,后来把它删除重新写一遍就正

常了,原因是什么我还不知道,如果你发现了,还希望告诉我一下。

lai_li
lai_li 回复betterhalf: 哦哦,没注意到,宏还是可以用的,但是建议还是用函数,按址传递来交换
一年多之前 回复
qq_34614890
qq_34614890 ()写成[]这个了
一年多之前 回复
C373216951
C373216951   2016.05.04 11:33

首先纠正下楼上,楼主使用的是宏,所以swap(x,y)是在预编译的代码替换,不需要传递地址。下面修改后的代码

 #include<iostream>
using namespace std;
#define swap(x,y) {int z;z=x;x=y;y=z;}
void outputarray(int a[], int n)
{
    int i;
    for (i = 0;i < n;i++)
    {
        cout << a[i];
    }
    cout << endl;
}
int indexofmax(int a[],int n)
{
    int i;
    int indexofmax = 0;
    for (i = 1;i < n;i++)
    {
        if (a[indexofmax] < a[i])
        {
            indexofmax = i;
        }
    }
    return indexofmax;
}
int main()
{
    int a[] = {3,2,6,5,9,4,7,1,8};
    for (int size = n=9;size > 1;size--)
    {
        int j = indexofmax(a, size);
        swap(a[j], a[size - 1]);
    }
    outputarray(a,9);
    return 0;
}
ZGZ1002
ZGZ1002   2016.05.04 15:46

swap(x,y) {int z;z=x;x=y;y=z;} 改成 swap(&x,&y) {int z;z=x;x=y;y=z;}

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!