我正在尝试使用指针和动态内存分配来运行冒泡排序技术,但代码似乎没有运行(eclipse崩溃)。请帮忙。我发布以下代码:
#include<iostream>
using namespace std;
void sort(int *);
//===========================================
int main()
{
int *a = new int[5];
int *c = a;
cout << "Enter the numbers\n";
for(int i = 0; i < 5; i++)
{
cin >> *a;
a++;
}
a = a - 4;
sort(a);
cout << c;
cout<<"\nSorting complete";
cout<<"\n Array after sorting";
for(int i = 0; i < 5; i++)
{
cout << *c << endl;
c++;
}
delete []a;
delete []c;
a = c = NULL;
return 0;
}
//===========================================
void sort(int *a)
{
int *b = a + 1;
for(int i = 0; i < 5; i++)
{
if(*a > *b)
{
int temp = *a;
*a = *b;
*b = temp;
a++;
b++;
}
else
{
b++;
continue;
}
}
}
提前谢谢。
答案 0 :(得分:0)
下面:
int *a=new int[5];
int *c=a;
cout<<"Enter the numbers\n";
for(int i=0;i<5;i++)
{
cin>>*a;
a++;
}
a=a-4;
您将a
增加5,然后将其减少4.然后尝试从1位置开始排序,但假设有5个元素,那么您将越过数组的末尾。如果你纠正了这个问题(例如a=c;
),你将正确地执行一次冒泡排序(我认为)。您必须执行多个传递才能完全对数组进行排序。
编辑: P.S.你也试图删除数组两次,这是不必要的(和未定义的行为)。
答案 1 :(得分:0)
让生活轻松
摆脱像
这样的代码cin>>*a;
a++;
并使用
cin>>a[i];
在其他地方使用相同的想法