嗨,不管怎样我的冒泡工作似乎无法正常工作。我不确定导致错误的位置。我想给我一个排序的输出列表。它给我分段错误并且已经尝试这个约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");
}
答案 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;
}
}
}
}