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

## 总结 ##

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

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

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;

}

}

}

## 总结 ##

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

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

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;

}

}

}


相关文章

  • 数据结构课程设计-综合排序
  • 东华理工大学 课程设计报告 课程设计题目: 综合排序的设计 学生姓名:何杨 班 级:1223202 专 业:信息与计算科学 指导教师:郭树蕻 2014年 12 月 13 日 目录 摘要 ........................... ...查看


  • 冒泡排序法附算法实现
  • 1. 冒泡排序 冒泡排序可以算是最经典的排序算法了,因为实现方法最简单,两层 for 循环, 里层循环中判断相邻两个元素是否逆序,是的话将两个元素交换,外层循环一次,就能将数组中剩下的元素中最小的元素"浮"到最前面,所以 ...查看


  • 进制转换和排序习题
  • 进制转换.逻辑判读.排序专项习题 一.选择题 1.设字符串S="Olympic ",S 的非空子串的数目是( ). A. 29 B. 28 C. 16 D. 17 E. 7 2.将数组{8, 23, 4, 16, 77, ...查看


  • C语言冒泡.插入法.选择排序算法
  • C 语言中三种常见排序算法分析 一.冒泡法(起泡法) 算法要求:用起泡法对10个整数按升序排序. 算法分析:如果有n 个数,则要进行n-1趟比较.在第1趟比较中要进行n-1次相邻元素的两两比较,在第j 趟比较中要进行n-j 次两两比较.比较 ...查看


  • PHP冒泡排序和查找算法介绍
  • 最新PHP冒泡排序和查找算法介绍 以下是三零网为大家整理的最新PHP冒泡排序和查找算法介绍的文章,希望大家能够喜欢! 冒泡排序(bubble sort)的原理是什么? 冒泡排序的原理可以顾名思义:把每个数据看成一个气泡,按初始顺序自底向上依 ...查看


  • C语言程序设计冒泡排序教学案例 杨进
  • C 语言程序设计冒泡排序教学案例 永川职业教育中心 杨进 [案例背景] 排序是计算机学科中一项复杂而重要的技术,在各种软件中使用频率都很高,因此专家们研究了各种排序算法.在中职类设计课程教学中,常以冒泡排序来讲解排序的原理,它简单,但过程繁 ...查看


  • 数据结构选择题集锦
  • 单项选择 ( B ) 1. 通常所说的主机是指∶ A) CPU B) CPU和内存 C) CPU.内存与外存 ( C )2. 在计算机内部,一切信息的存取.处理和传送的形式是∶ A) ACSII码 B) BCD码 C) 二进制 D) 十六进 ...查看


  • 数据结构课程设计实验报告心得体会C++
  • 专业班级:姓 名:学 号:设计时间:指导教师: 排序算法比较分析 08软件工程2班 汪伟 08010xxxxx 2010-9-15--2010-9-27 杨薇薇 课程设计报告的内容 一.题目:排序算法比较 1. 设计目的 1. 掌握各种排序 ...查看


  • 排序比较次数的数据结构分析
  • 排序 排序问题的输入是一个线性表,该线性表的元素属于一个偏序集:要求对该线性表的元素做某种重排,使得线性表中除表尾外的每个元素都小于等于(或大于等于)它的后继. 设R 为非空集合A 上的二元关系,如果R 满足自反性(对于每一个x ∈A ,( ...查看


热门内容