使用BubbleSort对数组进行排序

时间:2014-03-01 18:54:14

标签: c++ arrays bubble-sort

我改变了我的代码,但仍然无法弄清楚为什么它不会排序数组...冒泡排序只将所有元素移动到我的程序中的一个地方而不是排序数组... l累了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]);

}

}

2 个答案:

答案 0 :(得分:6)

冒泡排序实施存在一些问题。

首先,这一行:

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

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

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

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

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

答案 1 :(得分:1)

int main() {
    int a[20];
    srand(time(0));

    // array values initialization
    for (int i = 0; i < 19; i++) {
        a[i] = rand() % (81);
    }

    // array sorting
    bsort(a);

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