c语言中起泡法和选择法有什么不同,急!,谢谢!
起泡是比较a[i]与a[i+1];
选择是比较a[i]与a[j];(j
=
i+1)
这种看看书就行了,没必要来问。
不同点:
冒泡排序法:一趟一趟的将两个相邻的数进行交换如果有10个数则需要排9躺,如果是从大到小输出则需要每次将后一个数和前一个数进行比较将较大的数赋值给钱一个数,将较小的数赋值给后一个数,其实就是两个数交换,那么第一趟交换完毕后,最小的数便出现在了数组的最后面,然后进行第二趟的比较时则要对余下的前9个数进行比较,9趟比较完成后则数组也已经排好序。
选择排序法:10个数则是需要排9次,若按降序排列,第一次比较:则是将数组的第一个元素与数组中从第二个元素开始到最后的元素进行比较找到最大的数记录下来然后将值赋值给数组的第一个元素,然后进行第二次比较:则是将数组的第二个元素与数组中从第三个元素开始到最后的元素进行比较,找最大的数记录下来将值赋值给数组的第二个元素,依次循环找完。
程序分析:
选择排序:
1>.对于选择排序,首先理解排序的思想。给定一个数组,这种思想首先假定数组的首元素为最大(最小)的。此时就要利用3个变量i,j,k表示元素的下标。i表示当前,j表示找到的最大(最小)的下标,k用于存放每次循环中最大值的下标。
2>.在掌握了程序的基本思想之后,再进行排序。找到最大的下标后赋给k。找到之后判断所假设的当前值是否为此次循环的最大值,如果不是,就交换a[k] 与当前a[i]的值,从而将数组以一定的顺序排放,最后写一个循环将结果输出。
冒泡排序:
1>.对于冒泡排序,主要采用的是相邻数两两进行比较的思想。如果后一个比前一个大(小),则将其调换位置,直至所有的数都比较完。
2>.如果给定一个大小为n的数组,那么需要比较n-1趟,每一趟比较n-1-i次 ,i 表示上次循环中已经比较完的下标。写两个循环 判断,如需交换则进行交换,如果不需要交换则进行下两个数的比较,直到所有的数比较完。最后,用一个循环将排序完成后的数全部输出。
两者最大的区别在于算法本身。
起泡法(冒泡法)是相邻元素两两比较,每趟将最值沉底即可确定一个数在结果的位置,确定元素位置的顺序是从后往前,其余元素可能作相对位置的调整。可以进行升序或降序排序。
选择法是每趟是选出一个最值确定其在结果序列中的位置,确定元素的位置是从前往后,而每趟最多进行一次交换,其余元素的相对位置不变。可进行降序排序或升序排序。
一、冒泡法(起泡法)
1、算法示例:用起泡法对10个整数按升序排序。
2、算法分析:如果有n个数,则要进行n-1趟比较。在第1趟比较中要进行n-1次相邻元素的两两比较,在第j趟比较中要进行n-j次两两比较。比较的顺序从前往后,经过一趟比较后,将最值沉底(换到最后一个元素位置),最大值沉底为升序,最小值沉底为降序。
3、算法原码
#include <stdio.h>
int main()
{
int a[10],i,j,t;
printf("Please input 10 numbers: ");
/*输入源数据*/
for(i=0;i<10;i++)
scanf("%d",&a[i]);
/*排序*/
for(j=0;j<9;j++) /*外循环控制排序趟数,n个数排n-1趟*/
for(i=0;i<9-j;i++) /*内循环每趟比较的次数,第j趟比较n-j次*/
if(a[i]>a[i+1]) /*相邻元素比较,逆序则交换*/
{ t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
/*输出排序结果*/
printf("The sorted numbers: ");
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("
");
return 0;
}
二、选择法
1、算法示例要求:用选择法对10个整数按降序排序。
2、算法分析:每趟选出一个最值和无序序列的第一个数交换,n个数共选n-1趟。第i趟假设i为最值下标,然后将最值和i+1至最后一个数比较,找出最值的下标,若最值下标不为初设值,则将最值元素和下标为i的元素交换。
3、算法源代码:
#include <stdio.h>
int main()
{
int a[10],i,j,k,t,n=10;
printf("Please input 10 numbers:");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<n-1;i++) /*外循环控制趟数,n个数选n-1趟*/
{
k=i; /*假设当前趟的第一个数为最值,记在k中 */
for(j=i+1;j<n;j++) /*从下一个数到最后一个数之间找最值*/
if(a[k]<a[j]) /*若其后有比最值更大的*/
k=j; /*则将其下标记在k中*/
if(k!=i) /*若k不为最初的i值,说明在其后找到比其更大的数*/
{ t=a[k]; a[k]=a[i]; a[i]=t; } /*则交换最值和当前序列的第一
个数*/
}
printf("The sorted numbers: ");
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("
");
}
选择法:逐个数与之后的数比较
main()
{ int i,j,a[11],temp;
printf("input 10 numbers:");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<10;i++)
for(j=i+1;j<10;j++)
if(a[i]>a[j])
{temp=a[i];
a[i]=a[j];
a[j]=temp;
}
for(i=0;i<10;i++)
printf("%d ",a[i]);
}
冒泡法:两两比较,逐个冒泡
# include<stdio.h>
main()
{ int i,j,a[11],temp;
printf("input 10 numbers:");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<9;i++)
for(j=0;j<9;j++)
if(a[j]>a[j+1])
{temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
for(i=0;i<10;i++)
printf("%d ",a[i]);
}
起泡是比较a[i]与a[i+1];
选择是比较a[i]与a[j];(j = i+1)
这种看看书就行了,没必要来问。
既然是排序算法,自然想到通过算法的角度去回答它:
从时间复杂度和空间复杂度去考虑吧
c语言中起泡法和选择法有什么不同,急!,谢谢!
起泡法(冒泡法)是相邻元素两两比较,每趟将最值沉底即可确定一个数在结果的位置,确定元素位置的顺序是从后往前,其余元素可能作相对位置的调整。可以进行升序或降序排序。选择法是每趟是选出一个最值确定其在结果序列中的位置,确定元素的位置是从前往后,而每趟最多进行一次交换,其余元素的相对位置...
c语言排序
一、冒泡法(起泡法)算法要求:用起泡法对10个整数按升序排序。算法分析:如果有n个数,则要进行n-1趟比较。在第1趟比较中要进行n-1次相邻元素的两两比较,在第j趟比较中要进行n-j次两两比较。比较的顺序从前往后,经过一趟比较后,将最值沉底(换到最后一个元素位置),最大值沉底为升序,最...
请问冒泡法与选择法的区别在哪啊??
1:选择法 所谓的选择法就是先将10个数中最小的数与a[0]对换;再将a[1]到a[9]中的最小数与a[1]对换,依次类推,每比较一次,就找出一个没有经过排序的数中最小的一个.所以一共比较9轮.例如用4个数排序,第一次比较就是把4个数中的最小的数与a[0]对换,第二次:把余下的3个数中最小...
起泡法和选择法!!谢谢
第一次循环:把第一个数和后面的9个比较,比较9次;第二次循环:把第二个数和后面的8个比较,比较8次;、、、第八次、、、把第八个数和后面的2个比较,比较2次 第九次、、、把第九个数和后面的1个比较,比较1次 共比较:9+8+7+6+5+4+3+2+1=45 总结要是n个数比较:那么比较的次...
c语言中冒气泡法一直学不懂,请根据该图讲的简单详细一点。将对了有十 ...
起泡法有两种方式,一种是每次循环,将最大的元素沉底;一种是每次外层循环将最小的元素升起。你这里给出的算法就是后者。外层循环对应与你给出的算法里的i的循环,从1到n-1,循环n-1次,对应每一个i的值,都将有一个最小的元素上浮到第i-1个位置,并且i-1前面的元素已经从小到大有序。比如...
用C语言用选择法对10个整数按升序排列(指针变量表示数组)
起泡法:include "stdio.h"main(){ int a[11];int i,j;for(i=1;i<11;i++)scanf("%d",&a[i]);for(i=1;i<10;i++)for(j=1;j<=10-i;j++)(a[j]>a[j+1])?(a[0]=a[j],a[j]=a[j+1],a[j+1]=a[0]):(a[0]=0);for(i=1;i<11;i++)printf("%5d",a[...
C语言 写一函数用“起泡法”对输入的10个字符由大到小顺序排序_百度知 ...
C语言起泡法 函数调用 写一个函数用选择法 用起泡法对字符数组 比较法函数 函数的使用总结 分部积分法公式 其他类似问题2006-05-29 从键盘上输入10个数,C语言程序:用起泡法对这10个数排从小... 40 2013-05-18 c语言起泡法10个字符排序,编译通过但结果出现乱码。求高手解... 2 2007-02-19 ...
在c语言中何为起泡法,请高手给详细解释一下
第二轮比较完成,倒数第二大的数到了第九个位置 第3抡 第一个和第二个比较,之后如果第者大就交换位置。二 三 三 四 四 五 ...七 八 第三轮比较完成,倒数第三大的数到了第八个位置 就这样一直比较九轮,数据就从小到大排列好了。
用c语言:输入10个数,要求输出其中最大的数
方法1:(利用比较法)方法2:(利用起泡法)方法3:(利用函数的模块化设计)
c语言 比较法排序区别
比如:一组数排序前是a1,a2,a3,a4,a5,其中a2=a4,经过某种排序后为a1,a2,a4,a3,a5,则我们说这种排序是稳定的,因为a2排序前在a4的前面,排序后它还是在a4的前面。假如变成a1,a4,a2,a3,a5就不是稳定的了。2、内排序和外排序的不同 在排序过程中,所有需要排序的数都在内存,并在内存中...
禽凤达福: 是这样的 区别主要在交换的方式上每一轮都把最大或最小的元素筛选出来放在相应的位置上 这是相同的 但是 对于每一轮 比如第一轮 要把1~n 中最大的那个放到n这个位置 冒泡法每次比较和移动相邻的两项 而选择排序每次交换当前项和第n项 ...
麻栗坡县19285286672: C语言中选择法和冒泡法排序有什么区别(举例详解) - ?
禽凤达福: 如果用一组数,按小到大顺序排列,如果用冒泡法,原理是这样的,就是把最小的数放在最后,不断地把底层的较大的数冒泡升上来,选择法是用一个变量不断地选择小的数,将值付给变量再通过变量付给相应位置的数组元素…
麻栗坡县19285286672: C语言中冒泡排序法和选择排序法有哪些不同?
禽凤达福: 先上选择法和冒泡法: 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[...
麻栗坡县19285286672: 请问高手们 C语言中选择法排序和冒泡法排序的思想,两种方法有何不同,搞不懂,请举例详细说明一下.谢谢. - ?
禽凤达福: 不同点:冒泡法是顾名思义就是把小的泡冒到上面,大的泡沉到下面,最值在中间和其他的值交换;而选择法,是假定了一个最值,所以最值和其他的值的交换就发生在假定最值的地方;举例:1.选择法#include void main() { int i,j,min,...
麻栗坡县19285286672: C语言中冒泡法与选择法哪个更好?
禽凤达福: 选择法是逻辑最简单的排序方法,在元素很少的时候速度是最快的.缺点是比较次数必然是 N ^ 2 / 2(因为每次都得挨个比较一次,找出最值位置) 冒泡只有最坏的情况下才会有 N ^ 2 / 2的比较次数(因为一般情况下在中途就会排好),但是交换次数比选择法多(因为是相邻数据交换,不是直接到位).选择法交换次数最坏情况下是N - 1;冒泡则是 N ^ 2 / 2. 实际处理选择法用得比较多,冒泡是一种高不成地不就的算法.数据多的时候平均处理时间虽然比选择短,但是会比快速排序之类的O(N * logN)的算法慢得多
麻栗坡县19285286672: 冒泡法和选择排序法有什么不同?最好举下例子 - ?
禽凤达福: 冒泡排序和选择排序都是稳定的排序方法.不同的地方是处理的过程不一样.冒泡是相邻的两两比较,把小的交换上去,每一趟比较都会得到一个最小值.一个一个的就像是冒泡一样,比较形象.如果在一趟比较中,没有发现要交换的数值,则...
麻栗坡县19285286672: 在C语言中,选择法排序 与冒泡法的区别是神魔呢? 实在是搞不懂了 求大神用程序 具体解释一下?
禽凤达福: #include<stdio.h> #define EType int void swap(EType Array[],int i,int j) {/*交换数组元素*/ EType Temp; Temp = Array[i]; Array[i] = Array[j]; Array[j] = Temp; } void selectSort(EType Array[],int ArrayLen) {/*选择排序*/ int i,j,MinElementIndex; for(i = 0;i < ...
麻栗坡县19285286672: c++中的冒泡排序与选择排序有什么不同 - ?
禽凤达福: 选择排序和冒泡排序算法不同.冒泡排序是邻近两个互相比较,顺序错乱则交换位置,否则不变.选择排序会额外使用一块内存来标记当前最小值,用这个内存里的值与其他值相比较,若有更小的则更换内存标记值.举例说明:对于3,1,4,2,8 冒泡一轮之后:1,3,2,4,8 选择一轮之后:先是标记3为最小,比较一次后标记1为最小,一轮之后标记的还是1,将1与第一个交换位置.成了:1,3,4,2,8
麻栗坡县19285286672: C语言里冒泡排序和选择排序哪个效率高 - ?
禽凤达福: 要知道哪个效率高就要知道他们的排序比较方式有什么不同,我们先来比较一下! 例: 如要将数组:[12,14,26,5,8] 按升序排列成:[5,8,12,14,26] 选择排序: 第一趟:将第一个数与第二个数相比较;若第二个数较小,则第一个数与第二个数交换...
麻栗坡县19285286672: C语言中冒泡排序和选择排序都有什么优点 那种排序比较好 - ?
禽凤达福: 第一个是冒泡排序 第二个是选择排序 楼主有疑问提出.