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