2014-12-02 99 views
-2
void sort(int* A,int l) 
{ 
    int j; 
    int B[l]; 
    for(int i=0;i<l;i++) 
    { 
     j = largest(A,l); 
     B[l-i-1] = A[j]; 
     A[j] = -1; 
    } 
    A = B; 
} 
    int main() 
    { 
    . 
    int C[3] = {x,y,z}; 
    ... 
    sort(C,3); 
    cout<<C[0]<<C[1]; 
    } 

输出即将是-1-1 但是,如果我们分配A [0] = B [0]等,那么我们得到了正确的答案。 PS:我试过使用* A = * B,它只是给出第一个元素是正确的。阵列没有被正确分配

+0

需要初始化数组'INT B [1];'。试试'int B [l] = {};' – Himanshu 2014-12-02 06:34:08

+0

@Himanshu是真的吗? – 2014-12-02 06:36:59

+2

'A = B'在这里没有做任何明智的事情。从函数返回后,这两个变量都超出范围。您应该将'B'的内容复制到'A'中循环或使用'std :: copy'。 – 2014-12-02 06:37:19

回答

1

当您分配A = B时,您将重新分配一个局部变量,该变量包含指向数组的第一个元素的指针。此作业不会改变main中的任何内容。特别是,A的内容不会受到影响。

你完成排序后,您都必须从B的元素复制到A

void sort(int *A, int l) 
{ 
    int j; 
    int B[l]; 

    // sort into temporary array B  
    for (int i = 0; i < l; i++) { 
     j = largest(A, l); 
     B[l - i - 1] = A[j]; 
     A[j] = -1; 
    } 

    // copy temporary array B to result array A 
    for (int i = 0; i < l; i++) A[i] = B[i]; 
} 

但是,如果你看它,阿莫尔Bavannavar基本上是正确的:你不必检查整个每次最大元素的数组。检查剩余的元素就足够了。因此,您可以将最大的元素交换到最后,而不是将“低”值分配给“used”元素。当你这样做时,你会看到处理过的元素在最后,未处理的元素在开始。然后,你可以做你的排序到位,而不需要一个临时数组:

void sort2(int *A, int l) 
{ 
    while (l) { 
     int j = largest(A, l--); 
     int swap = A[j]; A[j] = A[l]; A[l] = swap; 
    } 
} 
+0

我对这种排序和代码没有感到困扰,我只想知道分配A = B,好吧,我得到了它,谢谢 – Glaedr 2014-12-03 05:53:30

0

有在你的例子的代码中的许多错误的用法,例如:

int B[l]; 

不能做,如果你像这样做我必须有一个恒定的价值。

A = B; 

将执行浅拷贝而不是深拷贝。 你可以在这里看到之探源:What is the difference between a deep copy and a shallow copy?

cout<<C[0]<<C[1]; 

将打印的数字连在一起,而不解析。

至于如何解决这个代码一个实现你的目标可能是对可能是:

#include <iostream> 

using namespace std; 

int largest(int* A, int l) 
{ 
int big=-1; 
int i; 
int index=0; 
for(i=0;i<l;i++) 
{ 
    if(A[i]>big) 
    { 
     big=A[i]; 
     index=i; 
    } 
} 
return index; 
} 

void sort(int* A,int l) 
{ 
int j; 
int *B=new int[l]; 
for(int i=0;i<l;i++) 
{ 
    j = largest(A,l); 
    B[l-i-1] = A[j]; 
    A[j] = -1; 
} 
for(int i=0;i<l;i++) 
{ 
    A[i]=B[i]; 
} 
} 
int main() 
{ 
int C[3] = {2,5,1}; 
sort(C,3); 
cout<<C[0]<<" "<<C[1]; 
return 1; 
} 
+0

int B [l]确实有效 – Glaedr 2014-12-02 16:23:29