首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BubbleSorting C语言

BubbleSorting C语言
EN

Stack Overflow用户
提问于 2017-02-04 17:45:22
回答 2查看 211关注 0票数 0

我们正在学习数组,而我只是讨论了气泡排序。

我编写了下面的代码来按升序对数组进行排序,但是有一个问题。

我找不到但我知道有问题。

我已经找到了正确的代码,但我仍然不明白为什么这不起作用。

我的代码

代码语言:javascript
复制
int a;
int i;

int temp;
int value[5] = { 5, 4, 3, 2, 1 };

for (i = 0; i < 5; i++) {
    if (value[i] > value[i + 1]) {
        temp = value[i];
        value[i] = value[i + 1];
        value[i + 1] = temp;
    }
}

for (a = 0; a < 5; a++) {
    printf(" %d ", value[i]);
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-05 05:09:12

你的代码有多个问题

  1. 首先,在使用value[i]进行排序之后打印数组元素,并且运行带有变量a.for(a=0;a<5;a++){ //的循环,您正在递增一个printf(“%d ",valuei);//但是在这里使用i,将其更改为.//,因为它将只打印valuei成员}
  2. 您正在访问value[5],而这不是您的。 对于(i=0;i<5;i++){ //在最后一个循环中的value4与value5进行比较,// value5没有定义//for(i=0;i<4;i++) //相反,运行循环直到i<4,我想这是您/想要的,但意外地犯了错误。if(valuei>valuei+1)
  3. 最大的问题是你还没有完全理解Bubblesort。在Bubble排序中,循环多次运行,直到循环中没有可交换的成员,即停止循环。

这就是维基百科他说

Bubble sort有时被称为sinking ,它是一种简单的排序算法,它反复遍历要排序的列表,比较每一对相邻的项目,如果它们的顺序不对,就交换它们。遍历列表将被重复,直到不需要交换,这表明列表已被排序。该算法是一种比较排序,它的命名方式是将较小或较大的元素“冒泡”放到列表的顶端。虽然该算法简单,但对于大多数问题来说,它过于缓慢和不切实际,即使与插入sort.It相比,如果输入通常是排序的,但偶尔也会有一些零序元素处于接近位置时,它也是实用的。

请参阅下面的演示文稿,以了解Bubble排序Works.See循环是如何一次又一次地运行的,直到没有成员可以交换为止。

逐步示例 让我们把数字的数组"5,1,4,2,8",并排序从最低的数字到最大的数字使用气泡排序。在每个步骤中,都会比较用粗体编写的元素。需要三张通行证。第一关 ( 5 1 4 2 8)到( 1 5 4 2 8 ),这里算法比较前2个元素,并交换自5> 1。 (1 5 4 2 8)至(1 4 5 2 8 ),交换自5>4 (1 4 5 2 8)至(1 4 2 5 8 ),交换自5>2 (1 4 2 5 8 )到(1 4 2 5 8 ),由于这些元素已经排序(8 > 5),算法不交换它们。第二关 ( 1 4 2 5 8)至( 1 4 2 5 8) (1 4 2 5 8)至(1 2 4 5 8 ),交换自4>2 (1 2 4 5 8)至(1 2 4 5 8) (1 2 4 5 8 )到(1 2 4 5 8 ),数组已经排序,但算法不知道是否完成。该算法需要一个不需要任何交换的整通,才能知道它是排序的。三通 ( 1 2 4 5 8)至( 1 2 4 5 8) (1 2 4 5 8)至(1 2 4 5 8) (1 2 4 5 8)至(1 2 4 5 8) (1 2 4 5 8 )至(1 2 4 5 8 )

因此,您需要运行循环多次,直到没有成员进行交换,您可以使用一个新变量count (最初在开始时初始化为1 )来实现,并且在每个循环开始之前,它被初始化为0,如果在循环中执行交换语句,则它会更改为1,并且循环再次被执行,因为count是1,如果在最后一次传递中,它的值不会更改为1,因为现在所有成员都已排序,所以循环不再运行。

票数 3
EN

Stack Overflow用户

发布于 2017-02-04 17:48:33

i == 4使用value[i+1]访问5时,它就不是您的了。

您正在访问无保留内存。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42043489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档