冒泡排序
为什么这个冒泡排序不成功void Bubble_sort(SqList &L1,int n)
{
int i,j,temp;
bool change=true;
L1.r = (RedType*)malloc(sizeof(RedType) * MAXSIZE);
L1.length=1;
for(i=1;i<=n;i++)
{
scanf("%d",&L1.r.key);
L1.length++;
}
for(i=1;i<L1.length;i++){
change=false;
for(j=1;j<L1.length-i;j++)
{
if(L1.r.key>L1.r.key)
{
temp=L1.r.key;
L1.r.key=L1.r.key;
L1.r.key=temp;
change=true;
cm.mvn++;
}
}
}
printf("排序后的数据序列为:");
for(i=1;i<L1.length;i++){
printf("%d ",L1.r.key);
}
printf("\n比较次数:%d\n", cm.cpn);
printf("移动次数:%d\n", cm.mvn);
} 冒泡排序是一种简单的排序算法,它重复地遍历要排序的序列,一次比较两个相邻的元素,并且交换他们的位置,如果他们的顺序错误就交换。直到没有再需要交换的元素,排序完成。
在你提供的代码中,有几个问题会导致冒泡排序不成功:
1. L1.r的初始化:你将L1.r指向了一个动态分配的内存空间,但没有为其赋值。
2. L1.length的初始化:你将L1.length初始化为了1,但实际上应该是n。
3. 排序结束的条件:你使用了一个change变量来判断是否还需要继续排序,但你并没有在排序发生交换时将change设置为true,导致无法正确判断排序是否完成。
下面是修正过的代码:
++
void Bubble_sort(SqList &L1,int n)
{
int i,j,temp;
bool change=true;
L1.r = (RedType*)malloc(sizeof(RedType) * n); // 分配n个元素大小的内存空间
L1.length=n; // 设置序列长度为n
for(i=1;i<n && change;i++) // 修改循环条件
{
change=false; // 初始化change为false
for(j=0;j<n-i;j++)
{
if(L1.r.key > L1.r.key)
{
temp = L1.r;
L1.r = L1.r;
L1.r = temp;
change=true; // 发生交换时将change设置为true
}
}
}
}
这样修改之后,冒泡排序应该就能够顺利执行了。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]