选择排序法和冒泡排序法的比较 - 范文中心

选择排序法和冒泡排序法的比较

09/24

## 总结 ##

冒泡排序法是两两依次比较,并做交换,交换的次数多。

选择排序法是每次循环找出最值,循环结束后将最值调整到合适位置,交换的次数少。 相同点:

1. 都要通过n-1组排出具有n 个数的顺序;(n 个数,n-1组排序)

2. 都是通过逐个相比,比出最值的;

不同点:

1. 冒泡法,顾名思义就是把小的泡冒到上面,大的泡沉到下面,最值在中间和其他的值交换;

而选择法,是假定了一个最值,所以最值和其他的值的交换就发生在假定最值的地方;

冒泡排序法的具体实现方法是这样的,从数组的第一个元素`arr[0]`开始,两两比较**(`arr[n],arr[n+1]`),如果前面的数大于后面的数(`arr[n] > arr[n+1]`), 那么交换两个元素的位置,把大的数往后移动。这样依次经过一轮比较以后,最大的数将会被交换到最后的位置(arr[n-1])。

先一起再来看看冒泡排序法是怎么排序的。

数组排序前 7 23 12 4 33 21 2 17 13 9 第一轮排序 7 12 4 23 21 2 17 13 9 33 第二轮排序 7 4 12 21 2 17 13 9 23

第三轮排序 4 7 12 2 17 13 9 21 第四轮排序 4 7 2 12 13 9 17

第五轮排序 4 2 7 12 9 13

第六轮排序 2 4 7 9 12

第七轮排序 2 4 7 9

第八轮排序 2 4 7

第九轮排序 2 4

可以看到,每一轮的排序,在这一轮中参与比较的元素中最大的数将会浮到最后。而冒泡排序的名字也是从这里来的。

void bubblesort(int a[], int m)

{

int i,j;

int tmp;

int flag = 0; //设定标志,如果第一次循环比较时没有发生交换,则说明数组是升序排序,不用排序,提前结束循环。

for(i = 0; i

{

for(j = 0; j

if(a[j] > a[j+1])

{

tmp = a[j];

a[j] = a[j+1];

a[j+1] = tmp;

flag = 1;

}

}

if(0 == flag)

{

printf("No Sort\n");

break;

}

}

}

在选择排序法中说的就是,每一次循环过程中,通过比较选择出你需要的**最值**。选择排序法的过程是,通**过比较,选择出每一轮中最值元素,然后把他和这一轮中最最前面的元素交换**,所以这个算法关键是要记录每次比较的结果,即每次比较后最值位置(下标)。

先来看看选择排序的过程:

数组排序前 7 23 12 4 33 21 2 17 13 9

第一轮循环 2 23 12 4 33 21 7 17 13 9

第二轮循环 4 12 23 33 21 7 17 13 9

第三轮循环 7 23 33 21 12 17 13 9

第四轮循环 9 33 21 12 17 13 23

第五轮循环 12 21 33 17 13 23

第六轮循环 13 33 17 21 23

第七轮循环 17 33 21 23

第八轮循环 21 33 22

第九轮循环 22 33

通过这个过程,我们可以看到,每轮循环过程中,都会找出这个最值元素,下一轮排序时就不用再考虑这个元素了。

void selectionsort(int a[],int m)

{

int i,j;

int k;

int tmp;

for(i = 0; i

{

k = i;

for(j = i+1; j

{

if(a[j]

k = j;

}

//i不等于k 是就证明a[i]不是最小的,

//i等于k 时证明a[i]就是本轮比较过程中最小的值 if(i != k)

{

tmp = a[i];

a[i] = a[k];

a[k] = tmp;

}

}

}


相关内容

  • PHP冒泡排序和查找算法介绍
    最新PHP冒泡排序和查找算法介绍 以下是三零网为大家整理的最新PHP冒泡排序和查找算法介绍的文章,希望大家能够喜欢! 冒泡排序(bubble sort)的原理是什么? 冒泡排序的原理可以顾名思义:把每个数据看成一个气泡,按初始顺序自底向上依 ...
  • 排序比较次数的数据结构分析
    排序 排序问题的输入是一个线性表,该线性表的元素属于一个偏序集:要求对该线性表的元素做某种重排,使得线性表中除表尾外的每个元素都小于等于(或大于等于)它的后继. 设R 为非空集合A 上的二元关系,如果R 满足自反性(对于每一个x ∈A ,( ...
  • 数据结构导论试题1
    全国2004年10月高等教育自学考试 1.要将现实生活中的数据转化为计算机所能表示的形式,其转化过程依次为( ) A.逻辑结构.存储结构.机外表示 B.存储结构.逻辑结构.机外表示 C.机外表示.逻辑结构.存储结构 D.机外表示.存储结构. ...
  • 银监会专业笔试
    2015年的银监会计算机类专业科目笔试的真题.举例如下: [例1]"science"是XML 中一个元素的定义,其中元素的内容是( ). A.title B.style C.italic D.science [例2]SQ ...
  • 概要设计与详细设计的区别
    概要设计与详细设计的区别 概要设计就是设计软件的结构,包括组成模块,模块的层次结构,模块的调用关系,每个模块的功能等等.同时,还要设计该项目的应用系统的总体数据结构和数据库结构,即应用系统要存储什么数据,这些数据是什么样的结构,它们之间有什 ...
  • 20世纪十大算法
    20世纪十大算法 本世纪初,美国物理学会(AmericanInstitute of Physics)和IEEE计算机社团(IEEE Computer Society)的一本联合刊物<科学与工程中的计算>发表了由田纳西大学的Jac ...
  • 软件体系结构期末试卷
    北京工业大学2008 – 2009学年 第二学期考试样题 考试课程: 软件体系结构 II 考试日期:2009 年 12 月 日 学 院: 软件学院 专 业: 软件工程 学 号: 姓名: 成绩: 一 填空题 (共 30 空, 每空 1 分) ...
  • 四年级下册科学复习提纲
    四年级下册科学复习提纲 复习要求: 1.熟记本提纲内容.每一个同学务必认真对待,家长予以严格监督. 2.至少认真翻阅科学书两次以上,记住其中的实验(所用材料.实验方法.实验现象.实验结论):还有书中出现的结论性的句子: 第一单元:电 科学概 ...
  • 浅谈浇注~浇注温度
    浇注的控制好坏直接关系到坯体的生长状况.不同的配比设计,可产生不一样的浇注稳定性:在配方设计已定的情况下,关键在于控制好浇注温度,搅拌时间.浇注控制是一个复杂多变的动态过程,料浆的生长规律也大不相同,把握好浇注稳定性的关键在于保证料浆稠化速 ...
  • 阿里巴巴培训
    信息质量提升手册 前 言 该手册主要是从买家体验和阿里巴巴网站规范的角度出发,通过对许多真实案例的整理提炼编辑而成,用于指导卖家提升自身的信息质量,内容涵盖信息质量提升的指导,指导部分主要采用文字提要和实例相结合的形式,从产品名称,关键词, ...