-
选择排序
思想:
对n个数进行n-1趟选择,每趟选择出一个最值(最大或最小由降序或升序决定)放前面,那么是如何选择出最值的呢?是通过不断的两两比较记录下较大(或较小)数的位置,最后一次比较结束后便可找出当前趟中最值的位置,最后将该最值与该趟开头处的数交换,这样就完成了一趟选择,然后排去这个在上一趟选择中选出的最值(即上一趟开头第一个数),再进行下一趟选择,那么如何排去上一趟选择出的最值开始下一趟选择呢?很简单,直接使下一趟选择的开头元素从第2个开始即可。经过这样的n-1次选择后即可完成排序。
步骤:
使用两层for循环
外循环括号(i = 0;i<n-1;i++),表示选择n-1趟,趟次从0到n-1
内循环括号(j = i+1;j<n;j++),表示每一趟要比较(n-1)-i次即
(总共要选择的趟数 - 当前趟次)次,循环体中让该趟的首个元素与其后的每一个元素进行比较并记下被选择元素位置。
-
冒泡排序
思想:
对n个数进行n-1趟排序,每趟排序中不断进行两两比较并换位,例如按升序排序,两两比较时,若前者大于后者,则将两者换位,否则,原封不动即可。每趟排序都会使一个最值到数列末尾的位置,这是通过不断的两两比较交换实现的,就好像水中的气泡不断和与它接触的水分子交换位置,使自己上升,使水分子相对下降,最后冒出水面,所以这种排序方法也叫冒泡排序。
步骤:
同样也是使用两层循环,但循环的条件有些许不同
外循环括号(i = 0;i<n-1;i++)
内循环(j = 0;j<n-1-i;j++),循环体中使索引j、j+1位置的元素比较并换位
-
区别
选择排序是不断的选出元素放在开头处(注意这个开头是每一趟的开头处),冒泡排序是不断的从末尾处冒出元素