冒泡排序和选择排序的不同之处有哪些?
冒泡是从第一个数开始,往下每两个数进行比较,如果后面闭前面小,就调换位置,这样一趟下来就将最大的放到最后,如排序:8 5 2 7 第一趟结果:5 2 7 8(注意没相邻的两个数都有进行比较,符合后面比前面小的都有交换) 选择排序是将第一个数和后面的每个数进行比较,如果后面的比前面小,就两个数调换位置,最后就将最小的数放在最前面 如排序:8 5 2 7 第一趟结果 2 5 8 7(注意,它是后面的每个数和第一个数比较)
先上选择法和冒泡法:
选择法
#include
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
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]);
}
通过这两个程序,可以发现他们的编程还是有些区别的,但是总结下:
相同点:
都要通过n-1组排出具有n个数的顺序;
2.都是通过逐个相比,比出最值的;
。。。
不同点:
1.冒泡法,顾名思义就是把小的泡冒到上面,大的泡沉到下面,最值在中间和其他的值交换;
而选择法,是假定了一个最值,所以最值和其他的值的交换就发生在假定最值的地方;
。。。
其实冒泡法和选择法的区别不大,都是效率比较低的方法。
冒泡每次比较完成,需要交换就交换。是为冒泡,每一次比较轻的气泡就往上冒;
标准的是从前向后比较,前n-i-1个元素,你的是从前向后,比较后n-i-1个元素。
冒泡排序和选择排序的根本区别就是
1)选择选好了(最大或最小元),需要交换(最大或最小元和当前元素不在同一位置),才交换,是选择排序;
2)比较完成,需要交换就交换(元素逆序,则交换)。是冒泡选择排序;
举例
选择排序:升序
i 自小到大
i前面的是已经排好序的数据。
选一个当前位置i 以后的最小元素,如果位置在 i不需要交换,否则交换,让从i 到 n
最小元素放在第i的位置。
冒泡排序: 升序
i 自小到大
i前面的是已经排好序的数据。
1) i 后面的每一个元素和i位置的元素比较,小的交换到i的位置。
2) i后面的相邻两个元素比较,小的交换到前面来。
你写的这个排序算法目前应该没有归类,如果没错的话。
冒泡,选择,希尔...等排序算法是前辈们总结出来的经典排序算法,它们各有自己的优缺点,适合不同情况下使用。比如冒泡排序实现起来简单,如果待排序数据量小,并且对效率要求不高时,完全可以满足;希尔排序效率比冒泡高,但是算法实现稍复杂,一般人们不愿意去实现它。
我认为排序算法的根本区别是它们排序的效率,就是排序消耗的时间和空间。你如果要比较冒泡排序和选择排序的区别,就去分析它们排序时分别占用的时间和空间。老实说,这些内容算法书都有讲解,但是我从来没有认真去研究分析过,也没有真的去计算过一个算法的效率值!如果那位对这方面熟悉,不妨帮 @飞行苏 计算下。 不过根据对算法的理解,冒泡排序的效率不会大于选择排序。
几种常见的排序(冒泡、选择、插入、希尔、堆排序)
冒泡排序优缺点:优点:比较简单,空间复杂度较低,是稳定的; 缺点:时间复杂度太高,效率慢;选择排序优缺点:优点:一轮比较只需要换一次位置; 缺点:效率慢,不稳定(举个例子5,8,5,2,9 我们知道第一遍选择第一个元素5会和2交换,那么原序列中2个5的相对位置前后顺序就破坏了)。
冒泡排序和交换排序的区别
以JAVA为例,冒泡排序和交换排序的区别是选择排序,每次都要遍历全部元素,选择其中最小的(或最大的)放到第一位;而冒泡排序比较相邻的两个数,大的(或者小的)放后面,由于冒泡是一边比较一边调整顺序,所以数列会越来越接近排序完成状态。Java是由Sun公司于1995年5月推出的面向对象的程序设计语言。J...
快速排序的思想
快速排序所采用的思想是分治的思想。常见的快速排序方法包括冒泡排序、选择排序、插入排序、快速排序、归并排序等。这些排序方法的原理和实现方式各不相同,但其核心思想都是通过比较和交换数据的位置来达到排序的目的。冒泡排序是一种简单的排序方法,它的主要思想是通过不断交换相邻元素的位置来将较大的元素...
C语言里冒泡排序和选择排序哪个效率高
要知道哪个效率高就要知道他们的排序比较方式有什么不同,我们先来比较一下! 例: 如要将数组:[12,14,26,5,8] 按升序排列成:[5,8,12,14,26]选择排序:第一趟:将第一个数与第二个数相比较;若第二个数较小,则第一个数与第二个数交换,否则不变;再将第一个数与第三个...
稳定的排序算法有哪些
2、堆排序:堆排序是一种基于二叉堆的排序算法,它不保证相等元素的相对顺序。在堆排序中,元素的交换可能导致相等元素之间的相对顺序改变。3、希尔排序:希尔排序是一种改进的插入排序算法,它不保证相等元素的相对顺序。希尔排序的排序过程中涉及增量,相等元素之间的相对位置可能发生变化。4、选择排序:...
简述各种排序算法的优缺点
n 个记录的文件的直接选择排序可经过n-1 趟直接选择排序得到有序结果:①初始状态:无序区为R[1..n],有序区为空。②第1 趟排序 在无序区R[1..n]中选出关键字最小的记录R[k],将它与无序区的第1 个记录R[1]交换,使R[1..1]和R[2..n]分别变 为记录个数增加1 个的新有序区和...
常见的排序算法—选择,冒泡,插入,快速,归并
太久没看代码了,最近打算复习一下java,又突然想到了排序算法,就把几种常见的排序算法用java敲了一遍,这里统一将无序的序列从小到大排列。 选择排序是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小元素,继续...
几种经典排序算法优劣比较的C++程序实现
一、低级排序算法 1.选择排序 (1)排序过程 给定一个数值集合,循环遍历集合,每次遍历从集合中选择出最小或最大的放入集合的开头或结尾的位置,下次循环从剩余的元素集合中遍历找出最小的并如上操作,最后直至所有原集合元素都遍历完毕,排序结束。(2)实现代码 \/\/选择排序法 template void Sort::...
将五个数的序列排序,从小到大排列,有多少种排法?
排序有很多种方法,常用的有三种:冒泡排序、选择排序、插入排序等,下面我们就对这三种方法做一下分析和比较,以便大家能够更好的理解和应用。一、冒泡排序 1、冒泡排序的基本思想:对于n个数进行排序(现假定是从大到小排序,以下均按此进行),将相邻两个数依次比较,将大数调在前头:也就是说第一...
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(...
单晓硫酸: 哎··· 先给你解释下这两种排序吧, 冒泡:相邻的两两比较,把小的交换上去,每一趟比较都会得到一个最小值 ..选择:从待排序队列中选出最小的值,放到已排序队列的后面.所以区别主要在交换的方式上,要是 如果只论速度,应该是选择排序更快,但冒泡排序是稳定的排序,感觉后者比前者好用 .回答完毕.
佛山市19351751476: 冒泡排序和选择排序的不同之处有哪些? - ?
单晓硫酸: 你写的这个排序算法目前应该没有归类,如果没错的话.冒泡,选择,希尔...等排序算法是前辈们总结出来的经典排序算法,它们各有自己的优缺点,适合不同情况下使用.比如冒泡排序实现起来简单,如果待排序数据量小,并且对效率要求不...
佛山市19351751476: 冒泡法和选择排序法有什么不同?最好举下例子 - ?
单晓硫酸: 冒泡排序和选择排序都是稳定的排序方法.不同的地方是处理的过程不一样.冒泡是相邻的两两比较,把小的交换上去,每一趟比较都会得到一个最小值.一个一个的就像是冒泡一样,比较形象.如果在一趟比较中,没有发现要交换的数值,则...
佛山市19351751476: c++中的冒泡排序与选择排序有什么不同 - ?
单晓硫酸: 选择排序和冒泡排序算法不同.冒泡排序是邻近两个互相比较,顺序错乱则交换位置,否则不变.选择排序会额外使用一块内存来标记当前最小值,用这个内存里的值与其他值相比较,若有更小的则更换内存标记值.举例说明:对于3,1,4,2,8 冒泡一轮之后:1,3,2,4,8 选择一轮之后:先是标记3为最小,比较一次后标记1为最小,一轮之后标记的还是1,将1与第一个交换位置.成了:1,3,4,2,8
佛山市19351751476: C语言中选择法和冒泡法排序有什么区别(举例详解) - ?
单晓硫酸: 如果用一组数,按小到大顺序排列,如果用冒泡法,原理是这样的,就是把最小的数放在最后,不断地把底层的较大的数冒泡升上来,选择法是用一个变量不断地选择小的数,将值付给变量再通过变量付给相应位置的数组元素…
佛山市19351751476: 冒泡排序和选择排序的区别 - ?
单晓硫酸: 是这样的 区别主要在交换的方式上 每一轮都把最大或最小的元素筛选出来放在相应的位置上 这是相同的 但是 对于每一轮 比如第一轮 要把1~n 中最大的那个放到n这个位置 冒泡法每次比较和移动相邻的两项 而选择排序每次交换当前项和第n项 ...
佛山市19351751476: 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[...
佛山市19351751476: 选择排序算法与冒泡排序算法有何异同啊? - ?
单晓硫酸: 区别在于:冒泡算法,每次比较如果发现较小的元素在后面,就交换两个相邻的元素.而选择排序算法的改进在于:先并不急于调换位置,先从A[1]开始逐个检查,看哪个数最小就记下该数所在的位置P,等一躺扫描完毕,再把A[P]和A[1]对调,这时A[1]到A[10]中最小的数据就换到了最前面的位置.所以,选择排序每扫描一遍数组,只需要一次真正的交换,而冒泡可能需要很多次.比较的次数是一样的.
佛山市19351751476: 请问冒泡法与选择法的区别在哪啊???
单晓硫酸: 选择法是逻辑最简单的排序方法,在元素很少的时候速度是最快的.缺点是比较次数必然是 N ^ 2 / 2(因为每次都得挨个比较一次,找出最值位置) 冒泡只有最坏的情况下才会有 N ^ 2 / 2的比较次数(因为一般情况下在中途就会排好),但是交换次数比选择法多(因为是相邻数据交换,不是直接到位).选择法交换次数最坏情况下是N - 1;冒泡则是 N ^ 2 / 2. 实际处理选择法用得比较多,冒泡是一种高不成地不就的算法.数据多的时候平均处理时间虽然比选择短,但是会比快速排序之类的O(N * logN)的算法慢得多
佛山市19351751476: 选择排序法和冒泡法 有何区别 - ?
单晓硫酸: 冒泡排序和选择排序都是稳定的排序方法.不同的地方是处理的过程不一样.冒泡是相邻的两两比较,把小的交换上去,每一趟比较都会得到一个最小值.一个一个的就像是冒泡一样,比较形象....