c++ - 使用指针手动排序数组时遇到问题

标签 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 ;
    }
}
}

最佳答案

所以你的代码中存在一些问题:

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 实际上永远不会改变,所以在 for 循环中比较它进行排序有点没有意义。
  2. 您在循环中使用表的元素作为迭代器。不好。
  3. 您的排序算法似乎是冒泡排序,但缺少一个额外的 for 循环。

下面附上我的程序版本,它比您的实现要好一点。 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]);
    }
}
}

关于c++ - 使用指针手动排序数组时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40770771/

相关文章:

c++ - 为什么 QCOMPARE(QString ("1"), "1") 会导致链接器错误?

c++ - 函数原型(prototype)认为一个类类型是未定义的,尽管它在同一个头文件中定义

c++ - 将 16 字节 CAS 与 GCC 结合使用时出现未定义的引用链接器错误

c++ - JNI 中的比较

javascript - 为什么json文件最后要加31

algorithm - 如何对(百万/十亿/...)整数进行排序?

arrays - 从添加新键的数组创建散列

java - 我无法理解以下代码

java - 方法没有采用正确的数组

javascript - 如何通过 Javascript/React 中的 props 对使用 map 方法的数组进行排序