【问题标题】:Bubble sort using only pointers and dynamic memory allocation仅使用指针和动态内存分配的冒泡排序
【发布时间】:2016-04-15 04:16:27
【问题描述】:

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

提前谢谢你。

【问题讨论】:

  • 为什么不使用std::vector(并整理出缩进)
  • 你为什么要这样分配输入?你真的应该做cin&gt;&gt;*(a+i);,这样你就不会做更多的分配并可能引发范围问题。
  • @edheal 这很可能是家庭作业,他不能使用向量
  • 你把它弄得太复杂了。从一个简单的场景开始,例如 int arr[5] = { 3, 5, 4, 2, 1 },然后调用 sort(arr) 对其进行排序。不要从用户那里获取输入,也不要使用任何动态分配或释放。一旦你知道如何用一个简单的案例来实现冒泡排序,那么如果需要的话,你可以添加其他的东西。
  • @AdityaKulkarni - 请不要感谢我 - 只需阅读文章并理解

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


【解决方案1】:

这里:

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;),您将正确执行冒泡排序的一次(我认为)。您必须执行多次遍历才能对数组进行完全排序。

编辑:您还试图删除数组两次,这是不必要的(和未定义的行为)。

【讨论】:

  • 哦..,好的..感谢您的帮助。我是新手。非常感谢您的帮助。我想,因为我使用了两个指针,指向同一个东西(动态分配的内存),我想我必须删除这两个指针。
  • @AdityaKulkarni:短语 “删除指针” 具有误导性。当你在一个指针上调用delete 时,你删除了指向的东西
  • 好的..,我想我必须更密切地处理“新”和“删除”...谢谢您的帮助。
【解决方案2】:

让生活更轻松

摆脱类似的代码

cin>>*a;
a++;

并使用

cin>>a[i];

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

【讨论】:

  • 嘿,谢谢伙计..,真的很感激..,我会努力的,并随时通知您。,
  • 坚持new返回的值。它使生活比乱用指针简单得多。使用[] 表示法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-12
  • 2015-02-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多