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

//================================================================//
//对数组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;*/

}

大神呢

大神呢

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

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

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

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

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

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

首先纠正下楼上,楼主使用的是宏,所以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;
}

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