我知道这对你们中的一些人来说可能是一个简单的过程,但过去两周我一直在处理这个任务,并尝试了多种不同的方法来实现一个数组的排序过程,在一个函数中,没有通过将整个数组放入函数中。我只允许传递一个指针和数组的大小。我不是在寻找给我的答案,只是一些一般提示和对将指针传递给控制数组的函数的理解。我搜索了互联网和我的书,但大多数东西都建议使用预制的排序功能。但是我必须自己创建一个。以下是我的感受,我最接近正确的代码。非常感谢任何帮助。
#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 ;
}
}
上面还有几个问题:
b
实际上永远不会改变,所以在 for 循环中比较它进行排序有点没有意义。
- 您在循环中使用表的元素作为迭代器。不好。
- 您的排序算法似乎是冒泡排序,但缺少一个额外的 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]);
}
}
}