冒泡法
算法示例
用起泡法对10个整数按升序排序。
算法分析
如果有n个数,则要进行n-1趟比较。在第1趟比较中要进行n-1次相邻元素的两两比较,在第j趟比较中要进行n-j次两两比较。比较的顺序从前往后,经过一趟比较后,将最值沉底(换到最后一个元素位置),最大值沉底为升序,最小值沉底为降序。
算法源代码
1 | #include <stdio.h> |
选择法
算法示例要求
用选择法对10个整数按降序排序。
算法分析
每趟选出一个最值和无序序列的第一个数交换,n个数共选n-1趟。第i趟假设i为最值下标,然后将最值和i+1至最后一个数比较,找出最值的下标,若最值下标不为初设值,则将最值元素和下标为i的元素交换。
算法源代码
1 | #include <stdio.h> |
区别:(个人见解)
- 冒泡法要进行对n个数进行n-1趟,第j趟要进行n-j次比较,每次比较相邻的数不符合则要交换,每趟最多需要n-j次数的交换
- 选择法也要进行n-1趟,每趟是选出最值,而选最值是把下标交换,直到选出最值的下标,把最值和第一位交换,每趟最多仅需1次数的交换
- 简单地说,冒泡法每次都是数的交换(各个下标对应的数是变化的),而选择法是通过下标交换(这时候各个下标对应的数是不变的)选出最值的下标,最后再进行数的交换