关于C语言冒泡排序法的问题

2025-01-07 02:12:00
推荐回答(4个)
回答1:

改好了:
#include "stdio.h"
#include "stdlib.h"
void PrintArray(int a[],int n) //输出排序每一步的结果
{
int i;
for(i=0;iprintf("%4d",a[i]);
printf("\n");
}
void BubbleSort(int a[],int n) //冒泡排序函数
{
int i,j,tmp; //tmp为中间变量
int flag; //标志变量,如果为0,说明不再交换顺序,排序结束
int count=0; //记录交换次数
printf("initial sorting:");
PrintArray(a,n); //输出排序前的序列
for(i=0;i{
flag=0; //初始值为0
for(j=i+1;j{if(a[i]>a[j]) //如果前面的数比后面的数大,进行交换
{
tmp=a[i];
a[i]=a[j];
a[j]=tmp;
flag=1; //如果发生交换,标识变量设为1
}
}
count++; //记录已经发生的排序次数
printf("after %d sorting:",count);
PrintArray(a,n); //输出第count次的排序结果
if(flag==0) //没进行一次排序,flag都清0,若交换再发生,则排序完成
{
return;
}
}
}
void main() //主函数
{
int *a,n=5,i=0;
a=(int *)malloc(n*sizeof(int)); //为5个待排序的整型数开辟储存空间
for(i=0;iscanf("%d",&a[i]); //输入待排序数
BubbleSort(a,n); //调用排序函数进行排序
free(a); //排序结束,释放储存空间
}

回答2:

改好了:
#include
"stdio.h"
#include
"stdlib.h"
void
PrintArray(int
a[],int
n)
//输出排序每一步的结果
{
int
i;
for(i=0;i//通过循环输出元素
printf("%4d",a[i]);
printf("\n");
}
void
BubbleSort(int
a[],int
n)
//冒泡排序函数
{
int
i,j,tmp;
//tmp为中间变量
int
flag;
//标志变量,如果为0,说明不再交换顺序,排序结束
int
count=0;
//记录交换次数
printf("initial
sorting:");
PrintArray(a,n);
//输出排序前的序列
for(i=0;i{
flag=0;
//初始值为0
for(j=i+1;j{if(a[i]>a[j])
//如果前面的数比后面的数大,进行交换
{
tmp=a[i];
a[i]=a[j];
a[j]=tmp;
flag=1;
//如果发生交换,标识变量设为1
}
}
count++;
//记录已经发生的排序次数
printf("after
%d
sorting:",count);
PrintArray(a,n);
//输出第count次的排序结果
if(flag==0)
//没进行一次排序,flag都清0,若交换再发生,则排序完成
{
return;
}
}
}
void
main()
//主函数
{
int
*a,n=5,i=0;
a=(int
*)malloc(n*sizeof(int));
//为5个待排序的整型数开辟储存空间
for(i=0;iscanf("%d",&a[i]);
//输入待排序数
BubbleSort(a,n);
//调用排序函数进行排序
free(a);
//排序结束,释放储存空间
}

回答3:

你把错误的情况说明白点

回答4:

是抄的吗?自己运行一下就看见了
第20行
for(i=0;j改成for(j=0;j