C语言数组中的起泡法,我虽然知道原理,可是写程序的时候就是混乱的。有没有简单明了的解释啊?
最佳答案
先了解冒泡法的核心:通过嵌套循环不断让每个位置的元素的值按照数组下标关系保持在最小值,核心算法是
int i=0;
int index=i;
for(i=0;i<n;i+=1){
for(int j=i;j<n;j+=1){
index=i;
if(a[j]<a[index]){
int receive=a[j];
a[j]=a[index];
a[index]=receive;
}
}
}
很多人会很奇怪,为什么这个核心算法可以实现一组数据的排序?写程序的时候应该i怎么考虑这个问题?下面我按照个人的理解给出一点点建议:
在写程序时,按照先定义,后初始化,后算法设计,最后输出的思想,可以分下面几步进行:
1.定义一个数组,并为数组每个元素赋值;
2.到了冒泡法的核心算法设计的时候,我们会想,怎么去令一个数组的长度的所有值按照顺序排列?
(1)我们可以从头到尾进行查找,先从第一个元素开始,我们可以令它与剩余元素进行比较,只要剩余元素有小于它的,就进行值的互换,比如我a[0]=4,a[4]=0,那么查到a[4]的时候就使a[4]和a[0]的值进行互换,互换的时候会发现,假如不定义一个中间的变量接住一个元素的值,就难以实现两个元素的值的互换,所以我们需要定义一个中间变量,使他先接住一个元素的值,比如我接住a[0]的值,然后a[0]=a[4]进行互换,因为a[0]的值已经发生变化,所以我们不能再利用赋值方式使a[0]的值赋给a[4],不过我们已经设置了中间变量,所以我们可以利用a[4]=中间变量来实现最后一个小步骤;
(2)上面是对于第一个元素的查找,当比较完毕,整个数组最小的元素就来到a[0]的位置,既然已经保证了a[0]的值处于最小,我们下一步就不需要考虑a[0]了,我们从a[1]开始继续查找,利用a[1]与剩余元素的值进行比较,再确定最小的元素并赋值给a[1]…………
(3)往复循环,完成了我们的冒泡法
其他回答
其它网友回答:
void BubbleSort(LineList R[],int n)
其它网友回答:
{ int i,j,exchange;
其它网友回答:
LineList tmp;
其它网友回答:
for (i=0;i<n-1;i++)
其它网友回答:
{exchange=0;
其它网友回答:
for (j=n-1;j>i;j--)
其它网友回答:
if (R[j].key<R[j-1].key)
其它网友回答:
{tmp=R[j]; /*R[j]与R[j-1]
其它网友回答:
R[j]=R[j-1];R[j-1]=tmp;
其它网友回答:
exchange=1;
其它网友回答:
}
其它网友回答:
if (exchange==0) return;
其它网友回答:
}
其它网友回答:
}
其它网友回答: