C++ 使用指针手动排序数组时出现问题

C++ 使用指针手动排序数组时出现问题,c++,arrays,sorting,pointers,C++,Arrays,Sorting,Pointers,我知道这对你们中的一些人来说可能是一个简单的过程,但我在过去两周一直在做这个任务,并尝试了多种不同的方法来实现一个数组的排序过程,在一个函数中,而不将整个数组传递给函数。我只允许传递一个指针和数组的大小。我不是在寻找答案,我只是想了解一些一般的技巧,以及如何将指针传递到控制数组的函数中。我已经在网上和我的书上搜索过了,但大多数东西都推荐使用premade排序功能。然而,我必须自己创造一个。下面是我感觉到的最接近正确代码的地方。非常感谢您的帮助 #include <iostream>

我知道这对你们中的一些人来说可能是一个简单的过程,但我在过去两周一直在做这个任务,并尝试了多种不同的方法来实现一个数组的排序过程,在一个函数中,而不将整个数组传递给函数。我只允许传递一个指针和数组的大小。我不是在寻找答案,我只是想了解一些一般的技巧,以及如何将指针传递到控制数组的函数中。我已经在网上和我的书上搜索过了,但大多数东西都推荐使用premade排序功能。然而,我必须自己创造一个。下面是我感觉到的最接近正确代码的地方。非常感谢您的帮助

#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 ;
    }
}
}
#包括
使用名称空间std;
void ptr_排序(int*aptr,int size);
int main()
{
int数组[5]={28,87,-3,45,19};
int size=sizeof(数组)/sizeof(数组[0]);
int a=数组[0];

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

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) ;
在这上面还有一些问题:

  • b
    实际上从来不会改变,所以在for循环中比较它进行排序是没有意义的
  • 在循环中使用表的元素作为迭代器。不太好
  • 您的排序算法似乎是bubnle排序,但缺少一个额外的for循环
  • 下面我附上我的程序版本,它比您的实现要好一点。
    ptr\u sort
    还没有完成-因为我在种子中为
    添加了额外的
    。
    将它与你的工作进行比较,并询问你是否有任何疑问

    #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]);
        }
    }
    }
    
    #包括
    使用名称空间std;
    void ptr_排序(int*aptr,int size);
    int main()
    {
    int数组[5]={28,87,-3,45,19};
    int size=sizeof(数组)/sizeof(数组[0]);
    
    看不出你是否能用伪代码描述你希望实现的算法
    在数组的第一个元素进入
    for
    循环的初始条件时分配给它,这不是您想要的。标准库将此操作视为在一对迭代器上运行的操作。指针是迭代器的一种特殊情况,因此您可能希望了解标准如何在其giv上运行一个例子:这里有一段代码,我确信你想用它来交换由两个指针指向的值(它不是),一种包含在标准库中的功能。您似乎也对指针的行为感到困惑——在指针定义的范围内进行迭代,int对通常使用
    for(int index=0;index
    而不是这里的构造,首先,将数组的第一个值设置为0。建议:尝试编写代码,对无法通过数学运算与
    int
    和指针交互的项目数组进行排序,然后将代码更改为对请求的整数值进行操作。我想我理解我会写出一些伪代码,然后改变我的循环,看看我是否能从那里把它分解。我感谢那些帮助我的人。如果我能弄明白的话,我会告诉你们的。我想感谢你们所有人。你们让我对数组和指针有了更好的理解。谢谢你们花时间来帮助我!
    #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]);
        }
    }
    }