C 无法正确使用do while循环来实现冒泡排序 //创建交换函数 无效交换(int*a,int*b) { //实现交换功能 int temp=*a; *a=*b; *b=温度; } 无效排序(int arrayofval[],int n) { int突发=0; 做 { for(int i=0,burst=0;iarrayofval[i+1]) { 掉期(&arrayofval[i]、&arrayofval[i+1]); 突发++; } } 而(突发!=0); 返回;

C 无法正确使用do while循环来实现冒泡排序 //创建交换函数 无效交换(int*a,int*b) { //实现交换功能 int temp=*a; *a=*b; *b=温度; } 无效排序(int arrayofval[],int n) { int突发=0; 做 { for(int i=0,burst=0;iarrayofval[i+1]) { 掉期(&arrayofval[i]、&arrayofval[i+1]); 突发++; } } 而(突发!=0); 返回;,c,bubble-sort,C,Bubble Sort,您好!我正在尝试在C中实现冒泡排序和交换函数,并且遇到了一些麻烦:-(调试时,我的交换函数和初始循环似乎可以工作。但是,我的函数似乎在第一次循环后退出,并且不会重复循环>交换值过程,因为以下条件: while(突发!=0) 没有运行。有人能帮我理解一下吗?它工作得很好,只是你应该执行i

您好!我正在尝试在C中实现冒泡排序和交换函数,并且遇到了一些麻烦:-(调试时,我的交换函数和初始循环似乎可以工作。但是,我的函数似乎在第一次循环后退出,并且不会重复循环>交换值过程,因为以下条件:

while(突发!=0)


没有运行。有人能帮我理解一下吗?

它工作得很好,只是你应该执行
i
,因为
arrayofval[i+1]
将指向
i=n-1
的数组之外

//create swap function 
void swap(int* a, int* b)
{
//implement swap function
int temp = *a;
*a = *b;
*b = temp;
}

void sort(int arrayofval[], int n)
{
int burst = 0;
do
{
  for(int i=0, burst = 0; i < n; i++)
  if(arrayofval[i] > arrayofval[i+1])
  {
  swap(&arrayofval[i], &arrayofval[i+1]);
  burst++; 
  }
}
while(burst != 0);
return; 
#包括
无效交换(int*a,int*b)
{
int temp=*a;
*a=*b;
*b=温度;
}
无效排序(int arrayofval[],int n)
{
int突发,i=0;
做
{
对于(i=0,突发=0;iarrayofval[i+1])
{
掉期(&arrayofval[i]、&arrayofval[i+1]);
突发++;
}
}
而(突发!=0);
}
int main(int argc,字符**argv){
int list[]={3,2,1};
排序(列表,3);
printf(“%d%d%d\n”,列表[0],列表[1],列表[2]);
}

您的数组已经排序了吗?在我的脑海中,我没有注意到任何特别可疑的东西,但我怀疑如果您使用调试器逐步执行此代码,您会很快看到它不起作用的原因。祝您好运。我的数组没有排序不幸的是,我使用了4,3,2作为顺序输入,并在一个循环后返回了3,2,4。我预计由于while(burst!=0)条件,我让循环再次运行,但是函数只是在第一次运行后返回。我没有看到while(burst…)在调试器中运行,所以我很好奇。代码有2个burst声明。外部burst,用于while(burst!=0)不是由
burst++;
更新的。这是内部
burst
@chux谢谢!如果我将循环中的
burst
更改为
&burst
,是否允许我直接编辑外部
burst
?注意到,代码还从
for
循环中删除了
burst
的声明-这是一个必要的步骤。事实上,
i
。毕竟是C!感谢大家指出这两个步骤!我想我可以在for循环之外声明burst——这个概念不正确吗?在您的原始代码中,这没有什么区别:您在for循环的INIT块中重置burst。但是在经典C中,您只能在t处声明变量代码块的开头(
{}
)。for(int
给出了一个编译错误:
错误:'for'循环初始声明只允许在C99或C11模式下进行。
。C允许在每个块的开头进行声明
{
,而不仅仅是在方法的开头。总之,这是个小问题。
#include <stdio.h>

void swap(int* a, int* b)
{
    int temp = *a;
    *a = *b;
    *b = temp;
}

void sort(int arrayofval[], int n)
{
    int burst, i = 0;
    do
    {
        for(i=0, burst = 0; i < n-1; i++)
            if(arrayofval[i] > arrayofval[i+1])
            {
                swap(&arrayofval[i], &arrayofval[i+1]);
                burst++; 
            }
    }
    while(burst != 0);
}

int main( int argc, char ** argv ) {
    int list[] = {3,2,1};
    sort( list, 3 );
    printf("%d %d %d\n", list[0], list[1], list[2] );
}