冒泡排序C语言
我们正在学习数组,我刚开始学习气泡排序。冒泡排序C语言,c,arrays,sorting,bubble-sort,C,Arrays,Sorting,Bubble Sort,我们正在学习数组,我刚开始学习气泡排序。 我编写了以下代码来按升序对数组进行排序,但存在一个问题。 我找不到,但我知道有个问题。 我已经找到了正确的代码,但我仍然不明白为什么这不起作用 我的代码 int a; int i; int temp; int value[5] = { 5, 4, 3, 2, 1 }; for (i = 0; i < 5; i++) { if (value[i] > value[i + 1]) { temp = value[i];
我编写了以下代码来按升序对数组进行排序,但存在一个问题。
我找不到,但我知道有个问题。
我已经找到了正确的代码,但我仍然不明白为什么这不起作用 我的代码
int a;
int i;
int temp;
int value[5] = { 5, 4, 3, 2, 1 };
for (i = 0; i < 5; i++) {
if (value[i] > value[i + 1]) {
temp = value[i];
value[i] = value[i + 1];
value[i + 1] = temp;
}
}
for (a = 0; a < 5; a++) {
printf(" %d ", value[i]);
}
inta;
int i;
内部温度;
int值[5]={5,4,3,2,1};
对于(i=0;i<5;i++){
如果(值[i]>值[i+1]){
温度=值[i];
值[i]=值[i+1];
值[i+1]=温度;
}
}
对于(a=0;a<5;a++){
printf(“%d”,值[i]);
}
当i==4
您使用值[i+1]
访问位置5,而该位置不是您的
for(i=0;i<5;i++){ //Here In The Last Loop value[4] is compared with value[5],
// value[5] is not defined
//for(i=0;i<4;i++)
//Instead Run Loop Till i<4 , I guess this is what you
//wanted but accidently made a mistake.
if(value[i]>value[i+1])
您正在访问未保留的内存 当
i==4
时,您使用值[i+1]
访问位置5,而该位置不是您的
for(i=0;i<5;i++){ //Here In The Last Loop value[4] is compared with value[5],
// value[5] is not defined
//for(i=0;i<4;i++)
//Instead Run Loop Till i<4 , I guess this is what you
//wanted but accidently made a mistake.
if(value[i]>value[i+1])
您正在访问未保留的内存 您的代码有多个问题
value[i]
进行排序之后打印数组元素,并使用变量a
运行循环
for(a=0;a<5;a++){ //You Are Incrementing a
printf(" %d ",value[i]); //But Using i here , change it to a.
//As It will just print the value[i] member
}
(15428)到(14528),从5>4开始交换
(14528)到(14258),从5>2开始交换
(1 4 25 8)到(1 4 25 8),现在,由于这些元素已按顺序排列(8>5),算法不会交换它们 第二遍 (14258)到(14258)
(14258)到(12458),从4>2开始交换
(12458)到(12458)
(1 2 45 8)至(1 2 45 8) 现在,数组已经排序,但算法不知道是否已完成排序。该算法需要一个完整的过程而不进行任何交换,才能知道它已排序 第三遍 (12458)到(12458)
(12458)到(12458)
(12458)到(12458)
(1 2 45 8)至(1 2 45 8)
因此,您需要多次运行循环,直到没有成员可交换为止,您可以通过使用一个新变量
count
,在开始时初始化为1
,在每个循环开始之前,将其初始化为0
,如果在循环中执行Swap语句,则它将更改为1
,再次执行循环,因为计数是1
,如果在最后一次传递中,其值没有更改为1
,因为所有成员现在都已排序,所以循环不会再次运行。您的代码有多个问题
value[i]
进行排序之后打印数组元素,并使用变量a
运行循环
for(a=0;a<5;a++){ //You Are Incrementing a
printf(" %d ",value[i]); //But Using i here , change it to a.
//As It will just print the value[i] member
}