冒泡排序似乎不起作用 - 分割错误

时间:2018-04-21 06:31:39

标签: c

嗨,不管怎样我的冒泡工作似乎无法正常工作。我不确定导致错误的位置。我想给我一个排序的输出列表。它给我分段错误并且已经尝试这个约1小时。看看代码:

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

#define N 10

 void sort(int [], int);
 void show(char *, int [], int);

int main(void)
{
int i, j, a[N];

srand(0);

for (j = 1; j <= 5; j++) {
    // initialise array (pseudo-randomly)
    for (i = 0; i < N; i++) {
        a[i] = rand()%100;
    }

    // display, sort, then re-display
    printf("Test #%d\n",j);
    show("Sorting", a, N);
    sort(a, N);
    show("Sorted ", a, N);
}   
return 0;
 }

// sort array using bubble sort
void sort(int a[], int n)
{
    int i, j, nswaps;
    for (i = 0; i < n; i--) {
        nswaps = 0;
        for (j = n-1; j > i; j--) {
        if (a[j] < a[j-1]) {
            int tmp;
            tmp = a[j];
            a[j] = a[j-1];
            a[j-1] = tmp;
            nswaps++;
        }
    }
    if (nswaps == 1) break;
  }
}

// display array, preceded by label
void show(char *label, int a[], int n)
{
int i;
printf("%s:", label);
for (i = 0; i < n; i++) {
    printf(" %02d", a[i]);
}
printf("\n");
}

2 个答案:

答案 0 :(得分:0)

你在技术上并没有在这里排序。而不是for (i = 0; i < n; i--),请尝试for (i = 0; i < n; i++)。这是因为你从i=0开始,所以在FOR循环中你需要增加i。< / p>

答案 1 :(得分:-1)

  

此外你应该删除 - &gt; if(nswaps == 1)break;   否则它不会按预期工作......

void sort(int a[], int n)
{
    int i, j;
    for (i = 0; i < n; i++) {
        nswaps = 0;
        for (j = n-1; j > i; j--) {
        if (a[j] < a[j-1]) {
            int tmp;
            tmp = a[j];
            a[j] = a[j-1];
            a[j-1] = tmp;
        }
    }
  }
}