仅使用指针和动态内存分配的冒泡排序

时间:2016-01-10 22:41:49

标签: c++ pointers dynamic-memory-allocation bubble-sort

我正在尝试使用指针和动态内存分配来运行冒泡排序技术,但代码似乎没有运行(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;
        }
    }
}

提前谢谢。

2 个答案:

答案 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];

在其他地方使用相同的想法