C语言中冒泡法与选择法哪个更好
不同点:
冒泡排序法:一趟一趟的将两个相邻的数进行交换如果有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 表示上次循环中已经比较完的下标。写两个循环 判断,如需交换则进行交换,如果不需要交换则进行下两个数的比较,直到所有的数比较完。最后,用一个循环将排序完成后的数全部输出。
冒泡法是相邻两个数比较,取大的再跟第三个比较,直到将最大的一个数沉底.
选择法是定义一个变量跟每一个数比较,比它小则不变,比它大就替换,直到把最大一个放在后面
冒泡只有最坏的情况下才会有 N ^ 2 / 2的比较次数(因为一般情况下在中途就会排好),但是交换次数比选择法多(因为是相邻数据交换,不是直接到位)。选择法交换次数最坏情况下是N - 1;冒泡则是 N ^ 2 / 2。
实际处理选择法用得比较多,冒泡是一种高不成地不就的算法。数据多的时候平均处理时间虽然比选择短,但是会比快速排序之类的O(N * logN)的算法慢得多
冒泡法容易理解。
没有什么好坏除非你能确定数据的大体关系
但是都不怎么样,属于性能相当差的排序算法
冒泡是就地排序的,不用额外的储存空间,但是这个性能实在不敢恭维O(n^2)算法,比较和交换次数不要太多,没事不要用这个
选择倒还可以,也可以改造成就地排序,比较次数多了点,不过交换次数比冒泡少一点,总体还是一样
真要用当然是用快排或者合并咯
c语言冒泡排序改成选择排序法
把 for(i=0;i<4-1;i++){for(j=0;j<4-i-1;j++){if(s[j][5]<s[j+1][5]){for(n=0;n<6;n++){t=s[j][n];s[j][n]=s[j+1][n];s[j+1][n]=t;}}}一段改成 for(i=0;i<4-1;i++){ for(t=i,j=t+1;j<4;j++) if(s[t][5]...
求简单C语言编程,冒泡法或选择法按成绩打印学生名单,源代码和程序流程图...
include <iostream>using namespace std;int main(){ int a[6]={5,2,1,3,4,6}; for(int i=0;i<6;i++) { for(int j=1;j<6-i;j++) { if(a[j]>a[j-1]) { int temp=a[j]; a[j]=a[j-1]; a[j-1]=temp; } } } for(i=0;i<6;i++...
...的数按照从大到小的次序排列,要求用冒泡法,选择法
include <stdio.h> 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++) \/*内循环每趟比较的...
编写程序,从键盘输入10个整数,要求用选择法和冒泡法将它们按从大到小...
\/\/冒泡法排序 include "stdio.h"define N 10 main(){ int a[N];int i,j,temp;for(i=0;i<N;i++)scanf("%d",&a[i]);for(i=0;i<N-1;i++)for(j=0;j<N-1-i;j++)if(a[j]<a[j+1]){temp=a[j];a[j]=a[j+1];a[j+1]=temp;} printf("\\n");for(i=0;i<N...
C语言冒泡排序法是什么?
4、直接选择排序 基本思想:依次选出数组最小的数放到数组的前面。首先从数组的第二个元素开始往后遍历,找出最小的数放到第一个位置。再从剩下数组中找出最小的数放到第二个位置。以此类推,直到数组有序。以上内容参考 百度百科-排序算法、百度百科-c语言冒泡排序 ...
编一个程序,产生30个随机整数,存入数组,用冒泡法或选择法分别对其...
\/\/冒泡排序。。 参数为数组名和元素个数。。void BubbleSort(int a[], int len){ int i, j;for (i = 0; i < len - 1; i++){ for (j = 0; j < len - 1 - i; j++){ if (a[j] > a[j+1]){ Swap(&a[j], &a[j+1]);} } } } int main(void){ int a[N...
用C语言编程:用“冒泡法”对输入的10个字符按由小到大的顺序排列。_百...
冒泡排序需要用到两层循环,第一层循环遍历数组中的元素,第二层则进行两两比较,如果顺序不对就要对其进行换位,直到排序完成:4、最后执行程序观察结果,按下crtl+F5弹出程序,随意输入10个数,按下回车键执行结果,此时就可以看到排序后的结果了。以上就是c语言冒泡排序程序的演示:...
C语言:对输入的十个数进行从小到大排序
然后用scanf接受数组,用户输入10个数以后,会将数存在数组array中,然后调用上面处理排序的函数,函数的输入就是刚才输入的数,最后在把排序的结果输出即可:4、最后编译运行,输入10个数,最后控制台输出了排序的结果,证明程序的逻辑是没有问题的。以上就是C语言输入10个数排序的演示:...
C语言:采用冒泡排序方法,对10个数按由小到大的的顺序排序
printf("排序后的结果是:\\n");for(i=0;i<10;i++){ printf("%d",a);} printf("\\n");return 0;} 冒泡法:算法分析:如果有n个数,则要进行n-1趟比较。在第1趟比较中要进行n-1次相邻元素的两两比较,在第j趟比较中要进行n-j次两两比较。比较的顺序从前往后,经过一趟比较后,将最...
C语言:冒泡排序法将数组中10个元素从小到大排序,并找出最小值?_百度...
include<stdio.h> int main(){ int a[11],min=0,t;for(int i=0;i<10;i++)scanf("%d",&a[i]);min=a[0];for(int i=0;i<10;i++)if(a[i]<min)\/\/求最小值 min=a[i];for(int i=0;i<10;i++)\/\/冒泡排序 for(int j=0;j<9-i;j++)if(a[j]>a[j+1]){ t=a...
宗圣伏高喜: 选择法是逻辑最简单的排序方法,在元素很少的时候速度是最快的.缺点是比较次数必然是 N ^ 2 / 2(因为每次都得挨个比较一次,找出最值位置) 冒泡只有最坏的情况下才会有 N ^ 2 / 2的比较次数(因为一般情况下在中途就会排好),但是交换次数比选择法多(因为是相邻数据交换,不是直接到位).选择法交换次数最坏情况下是N - 1;冒泡则是 N ^ 2 / 2. 实际处理选择法用得比较多,冒泡是一种高不成地不就的算法.数据多的时候平均处理时间虽然比选择短,但是会比快速排序之类的O(N * logN)的算法慢得多
乐东黎族自治县15917581546: C语言里冒泡排序和选择排序哪个效率高 - ?
宗圣伏高喜: 要知道哪个效率高就要知道他们的排序比较方式有什么不同,我们先来比较一下! 例: 如要将数组:[12,14,26,5,8] 按升序排列成:[5,8,12,14,26] 选择排序: 第一趟:将第一个数与第二个数相比较;若第二个数较小,则第一个数与第二个数交换...
乐东黎族自治县15917581546: C语言 冒泡排序法和选择法的不同,本质区别 - ?
宗圣伏高喜: 是这样的 区别主要在交换的方式上每一轮都把最大或最小的元素筛选出来放在相应的位置上 这是相同的 但是 对于每一轮 比如第一轮 要把1~n 中最大的那个放到n这个位置 冒泡法每次比较和移动相邻的两项 而选择排序每次交换当前项和第n项 ...
乐东黎族自治县15917581546: C语言中选择法和冒泡法排序有什么区别(举例详解) - ?
宗圣伏高喜: 如果用一组数,按小到大顺序排列,如果用冒泡法,原理是这样的,就是把最小的数放在最后,不断地把底层的较大的数冒泡升上来,选择法是用一个变量不断地选择小的数,将值付给变量再通过变量付给相应位置的数组元素…
乐东黎族自治县15917581546: C语言中冒泡排序和选择排序都有什么优点 那种排序比较好 - ?
宗圣伏高喜: 第一个是冒泡排序 第二个是选择排序 楼主有疑问提出.
乐东黎族自治县15917581546: 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]...
乐东黎族自治县15917581546: 请问冒泡法与选择法的区别在哪啊???
宗圣伏高喜: 选择法是逻辑最简单的排序方法,在元素很少的时候速度是最快的.缺点是比较次数必然是 N ^ 2 / 2(因为每次都得挨个比较一次,找出最值位置) 冒泡只有最坏的情况下才会有 N ^ 2 / 2的比较次数(因为一般情况下在中途就会排好),但是交换次数比选择法多(因为是相邻数据交换,不是直接到位).选择法交换次数最坏情况下是N - 1;冒泡则是 N ^ 2 / 2. 实际处理选择法用得比较多,冒泡是一种高不成地不就的算法.数据多的时候平均处理时间虽然比选择短,但是会比快速排序之类的O(N * logN)的算法慢得多
乐东黎族自治县15917581546: 请问高手们 C语言中选择法排序和冒泡法排序的思想,两种方法有何不同,搞不懂,请举例详细说明一下.谢谢. - ?
宗圣伏高喜: 不同点:冒泡法是顾名思义就是把小的泡冒到上面,大的泡沉到下面,最值在中间和其他的值交换;而选择法,是假定了一个最值,所以最值和其他的值的交换就发生在假定最值的地方;举例:1.选择法#include void main() { int i,j,min,...
乐东黎族自治县15917581546: 冒泡法和选择排序法有什么不同?最好举下例子 - ?
宗圣伏高喜: 冒泡排序和选择排序都是稳定的排序方法.不同的地方是处理的过程不一样.冒泡是相邻的两两比较,把小的交换上去,每一趟比较都会得到一个最小值.一个一个的就像是冒泡一样,比较形象.如果在一趟比较中,没有发现要交换的数值,则...