无法使用指针手动排序数组

时间:2016-11-23 17:25:53

标签: c++ arrays sorting pointers

我理解对于你们中的一些人来说这可能是一个简单的过程,但我在过去的两周里一直在研究这个任务,并尝试了多种不同的方法来实现数组的排序过程,在一个函数中,没有通过将整个数组放入函数中。我只允许传递指针和数组的大小。我没有找到答案给我一些一般的技巧和理解,将指针传递给控制数组的函数。我搜索了互联网和我的书籍,但大多数建议都使用预制排序功能。但是我必须自己创造一个。以下是,我觉得,最接近我的正确代码。非常感谢任何帮助。

#include <iostream>
using namespace std ;
void ptr_sort(int *aptr, int size) ;

int main()
{
int array[5] = { 28, 87, -3, 45, 19 } ;
int size = sizeof(array)/sizeof(array[0]) ;
int a = array[0] ;

cout << "Original array: " ;

for(a = 0 ; a < size ; a++)
{
    cout << array[a] << " " ;
}
cout << endl ;

ptr_sort(&a, size) ;

cout << "Sorted array: " ;

for(a = 0 ; a < size ; a++)
{
    cout << array[a] << " " ;
}
cout << endl ;

return 0 ;
}


void ptr_sort(int *aptr, int size)
{
int temp ;
int b = *aptr += 1 ;

for(*aptr = 0 ; *aptr < size ; aptr++)
{
    if ( *aptr < b)
    {
        temp = *aptr ;
        *aptr = b ;
        b = temp ;
    }
}
}

1 个答案:

答案 0 :(得分:1)

因此您的代码中存在一些问题:

int main()
{
    int array[5] = { 28, 87, -3, 45, 19 } ;
    int size = sizeof(array)/sizeof(array[0]) ;
    int a = array[0] ;

    cout << "Original array: " ;

    for(a = 0 ; a < size ; a++)
    {
        cout << array[a] << " " ;
    }
    cout << endl ;

    ptr_sort(&a, size) ;

您已定义int a,然后您已为其分配了数组的第一项。我想这不是你想要的,因为在代码的最后我引用了你将a变量的指针传递给排序函数。您可能希望将指向数组的指针传递给排序函数。您也可以在for中使用a变量,并完全更改其初始值。

void ptr_sort(int *aptr, int size)
{
int temp ;
int b = *aptr += 1 ;

for(*aptr = 0 ; *aptr < size ; aptr++)
{
    if ( *aptr < b)
    {
        temp = *aptr ;
        *aptr = b ;
        b = temp ;
    }

}

上面还有一些问题:

  1. b实际上永远不会改变,所以将它在in for循环中进行比较是有点无意义的。
  2. 在循环中使用table的元素作为迭代器。不好。
  3. 你的排序算法似乎是冒充式,但缺少一个额外的循环。
  4. 下面我附上我的程序版本,它比你的实现好一点。 ptr_sort尚未完成 - 因为我播种,您需要额外的for。 将它与您的工作进行比较,并询问您是否有任何疑问。

    #include <iostream>
    using namespace std ;
    void ptr_sort(int *aptr, int size) ;
    
    int main()
    {
    int array[5] = { 28, 87, -3, 45, 19 } ;
    int size = sizeof(array)/sizeof(array[0]) ;
    
    cout << "Original array: " ;
    
    for(int i = 0 ; i < size ; i++)
    {
        cout << array[i] << " " ;
    }
    cout << endl ;
    
    ptr_sort(array, size) ;
    
    cout << "Sorted array: " ;
    
    for(int i = 0 ; i < size ; i++)
    {
        cout << array[i] << " " ;
    }
    cout << endl ;
    
    return 0 ;
    }
    
    
    void ptr_sort(int *aptr, int size)
    {
    
    for(int i = 0 ; i < size - 1; i++)
    {
        if ( aptr[i] < aptr[i + 1] )
        {
            std::swap(aptr[i], aptr[i + 1]);
        }
    }
    }