请问高手们 C语言中选择法排序和冒泡法排序的思想,两种方法有何不同,搞不懂,请举例详细说明一下.谢谢。

如题所述

拿升序来说:
冒泡法,就是小的上升,大的沉底。
关键点:
(设10个数排序)
for(j=0;j<9;j++)
for(i=0;i<9-j;i++)
if(a[i]>a[i+1])
{t=a[i];a[i]=a[i+1];a[i+1]=t;}
每次就从a[0]开始与下一个元素比。若a[0]>a[1],那么a[0]与a[1]交换值;若a[0]<a[1],不交换。这样就会确保了a[1]是目前最大的。
然后,a[1]与下一个元素比。若a[1]>a[2],那么a[1]与a[2]交换值;若a[1]<a[2],不交换。
这样又确保了a[2]是目前最大的。
。。。。。。如此类推,a[9]就是最大的。
接着j++,进入第二次冒泡,把a[8]弄成最大的,而i<9-j就使比较只在a[0]~a[8]中比较,因为a[9]已经为最大,无需再排。
例:
输入:34 67 90 43 124 87 65 99 132 26
输出:26 34 43 65 67 87 90 99 124 132
34与67比,67大; 然后,67与90比,90大; 90与43比,90大,90与43换位置; 90与124比,124大; 124与87比,124大,124与87换位置.......

####总结:比的位置一步步下移,最大的数也跟着一步步下移,直到最后一个位置。

选择法:
关键点:
for(i=0;i<n-1;i++)
{k=i;
for(j=i+1;j<n;j++)
if(a[j]<a[k])
k=j;
t=a[k];a[k]=a[i];a[i]=t;
这就像打擂台一样,先选定a[0]为最小的。a[k]就是在擂台上台主,a[j](也就是a[1]~a[9])一个个上去挑战,假设a[5]<a[k]了,k=5;也就是现在的a[5]是新的台主了。后面的数只要和现在这个新a[k]也就是a[5]比较了。最后,a[0]与最后留下的交接值。
类似的,i++,a[1]为初始台主。。。。。。
例子:
输入:43 67 90 32 124 87 65 99 132 26
输出:26 32 43 65 67 87 90 99 124 132
如第一次,43与67比,43小; 43与90比,43小; 43与32比,32小,成为新的台主,后面的数就与32比。最后只剩a[9] 26, a[9]与a[0]交换值。。。。

####总结,先假定a[0](接着是a[1],a[2]...)为最小值当台主一个个比,谁最小成为最终台主就能放在a[0](接着是a[1],1[2]....)的位置。

啊啊啊啊,感觉有点乱- -|||,希望LZ看懂,呵呵,我学的时候也觉得很难辨别,看到这个问题时也忘了,回去复习了一遍才弄明白,不过表达能力就。。。嘿嘿。
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-06-22
不同点:冒泡法是顾名思义就是把小的泡冒到上面,大的泡沉到下面,最值在中间和其他的值交换;
而选择法,是假定了一个最值,所以最值和其他的值的交换就发生在假定最值的地方;
举例:1.选择法
#include<stdio.h>

void main()
{
int i,j,min,temp;
int a[10];
printf("请输入十个整数:");
for(i=0;i<=9;i++)
scanf("%d",&a[i]);
for(i=0;i<9;i++)
{
min=i;
for(j=i+1;j<=9;j++)
{
if(a[min]>a[j])
{
min=j;
}
temp=a[j];
a[j]=a[min];
a[min]=temp;
}
}
for(i=0;i<=9;i++)
printf("%4d",a[i]);
}
2.冒泡法
#include<stdio.h>

void main()
{
int i,j,temp;
int a[10];
printf("请输入十个整数:");
for(i=0;i<=9;i++)
scanf("%d",&a[i]);
for(i=0;i<9;i++)
for(j=9;j>i;j--)
{
if(a[j]<a[j-1])
{
temp=a[j];
a[j]=a[j-1];
a[j-1]=temp;
}
}/*
for(j=0;j<9-i;j++)
{
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}大的气泡往下沉,小的气泡往上浮!!!注意:是a[j-1]还是a[j+1];
深刻了解!!!
*/
for(i=9;i>=0;i--)
printf("%4d",a[i]);
}本回答被提问者采纳
第2个回答  2011-06-22
选择法排序好像是打擂台;到最后只留下最大/小
冒泡法排序就是先把最大/小排列到前面

C语言中冒泡排序法和选择排序法有哪些不同
1、冒泡排序法:一趟一趟的将两个相邻的数进行交换如果有10个数则需要排9躺,如果是从 大到小输出则需要每次将后一个数和前一个数进行比较将较大的数赋值给钱一个数,将较小的数赋值给后一个数,其实就是两个数交换,那么第一趟交换完毕后,最 小的数便出现在了数组的最后面,然后进行第二趟...

c语言中起泡法和选择法有什么不同,急!,谢谢!
两者最大的区别在于算法本身。起泡法(冒泡法)是相邻元素两两比较,每趟将最值沉底即可确定一个数在结果的位置,确定元素位置的顺序是从后往前,其余元素可能作相对位置的调整。可以进行升序或降序排序。选择法是每趟是选出一个最值确定其在结果序列中的位置,确定元素的位置是从前往后,而每趟最多进行...

C语言中选择排序和冒泡排序的区别是什么?哪位大侠教教小弟
总的来说,两种排序比较的次数是相同的 但交换的次数,选择排序是更少的 虽然两者的时间复杂度都是O(n^2)但通常,选择排序更快一点参考资料:http:\/\/hi.baidu.com\/yukunlinykl\/blog\/item\/56f3986e768fe5db81cb4a17.html

C语言排序:冒泡排序与选择排序的组别
不同点:1.冒泡法,顾名思义就是把小的泡冒到上面,大的泡沉到下面,最值在中间和其他的值交换;而选择法,是假定了一个最值,所以最值和其他的值的交换就发生在假定最值的地方;。。。其实冒泡法和选择法的区别不大,都是效率比较低的方法。

求c语言选择排序法和 冒泡排序法代码!
应用交换排序基本思想的主要排序方法有:冒泡排序和快速排序。 冒泡排序 1、排序方法 将被排序的记录数组R[1..n]垂直排列,每个记录R看作是重量为R.key的气泡。根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R:凡扫描到违反本原则的轻气泡,就使其向上"飘浮"。如此反复进行,直到最后任何两个...

C语言冒泡排序法是什么?
冒泡排序法,是C语言常用的排序算法之一,意思是对一组数字进行从大到小或者从小到大排序的一种算法。具体方法是:相邻数值两两交换。从第一个数值开始,如果相邻两个数的排列顺序与我们的期望不同,则将两个数的位置进行交换(对调);如果其与我们的期望一致,则不用交换。重复这样的过程,一直到...

c语言的两种排序?
1、选择排序法 要求输入10个整数,从大到小排序输出 输入:2 0 3 -4 8 9 5 1 7 6 输出:9 8 7 6 5 3 2 1 0 -4 代码:include<stdio.h> int main(int argc,const char*argv[]){ int num[10],i,j,k,l,temp;\/\/用一个数组保存输入的数据 for(i=0;i<=9;i++){ scanf(...

C语言用冒泡法和选择法对10个数进行排序
选择排序算法C语言的实现 选择法排序原理:一次选定数组中的每一个数,记下当前位置并假设它是从当前位置开始后面数中的最小数min=i,从这个数的下一个数开始扫描直到最后一个数,并记录下最小数的位置min,扫描结束后如果min不等于i,说明假设错误,则交换min与i位置上数。 具体实现代码如下:include...

c语言中数组排序里的插空排序法是什么意思啊?
插入排序法是一种数组元素排序方法,冒泡法也是。两者是不同的排序,两者时间复杂度为n的平方,而冒泡法更直观一点。插入排序就相当于打牌,假如你手里的牌是从小到大排好序的,那么你每摸一张牌,你就会根据这张牌的大小寻找这张牌应该插入的位置,然后插进去。选择排序就是你一下获得了所有的牌,...

C语言数组A用选择排序
下面介绍一种源自冒泡法但更有效率的方法“选择法”。(2)“选择法”选择法循环过程与冒泡法一致,它还定义了记号k=i,然后依次把a[k]同后面元素比较,若a[k]>a[j],则使k=j.最后看看k=i是否还成立,不成立则交换a[k],a[i ],这样就比冒泡法省下许多无用的交换,提高了效率。void choise...

相似回答