gpt4 book ai didi

c++ - 使用 BubbleSort 对数组进行排序

转载 作者:太空宇宙 更新时间:2023-11-04 15:19:47 26 4
gpt4 key购买 nike

我更改了我的代码,但仍然无法弄清楚为什么它不会对数组进行排序...冒泡排序仅将所有元素在我的程序中向右移动一个位置,而不是对数组进行排序...我厌倦了 bsort 和 ssort,两者都做同样的事情1 个位置的事物移位元素

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void bsort(int n,int a[])
{
int i,j,k;
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1;j++)
{
if(a[j]>a[j+1]);
{

k=a[j+1];
a[j+1]=a[j];
a[j]=k;

}
}

}

int main()
{
int i,j,k,m,n;

srand(time(0));

printf("Unesi broj clanova niza:");
scanf("%d",&n);

int a[n];

printf("Niz za sortiranje je:\n");
for(int i=0;i<n;i++) //Generisanje niza
{
a[i]=rand()%(81);
}

for(int i=0;i<n;i++)
{
printf("%3d",a[i]);
}

bsort(n,a);




printf("\n\nSortirani niz je:\n");
for(i=0;i<n;i++)
{
printf("%3d",a[i]);

}

最佳答案

您的冒泡排序实现存在几个问题。

首先,这一行:

if (a[j] > a[j + 1]); {

不正确。分号终止条件。结果,以下 block 在内循环的每次迭代中执行,您最终无条件地为每个值交换 a[j]a[j+1] j。这意味着您正在对数组进行无意义的重新排列。

其次,您没有正确处理内部循环中的边缘情况。当j == 19时,访问a[j+1],即a[20],超出了结尾大批。因此,您将垃圾数据导入数组。

最后,即使在更正了上述内容之后,您的实现仍然是不必要的低效,因为您的内循环在外循环的每次迭代中都遍历了整个数组,而这并不是必须的。提示:尝试考虑内循环的初始化或终止条件如何依赖于i

更新(在 OP 重写之后):您只解决了第二个问题。

关于c++ - 使用 BubbleSort 对数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22118819/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com