上了快三年的大学,今天总算弄明白了冒泡排序和选择排序。记得大一的c语言考试最后一题就是冒泡排序,我当时只是强行背下来了,而没有真正的理解。不理解的东西很容易就忘记了。
今天就讲一下我对冒泡和选择排序的理解。
冒泡:
冒泡排序,顾名思义,像泡泡一样浮上来。对的,冒泡排序法就是找最大的数,把最大的数放到最后一个,依次循环。
正如程序所示,外层循环控制比较次数,因为最后一个数不需要比较所以循环次数是N-1.
第二层循环次数是N-1-i。因为每次第一层执行过后,第二次就会少一次执行,所以用N-1-i作为for语句的判断条件。
选择排序法:
因为冒泡排序是每两个数依次进行比较,所以执行次数太多,浪费时间。
而选择排序的不需要执行很多次就可以正确排序。
选择排序法是找最小值放在前面。看程序,外层循环执行N-1好理解,需要注意的是,这里要定义一个最小值min,因为我判断的时候不知道后面是否还有更小的数。
第二层循环从i+1开始执行从第一层i的下次开始执行,if判断,如果最小值比后面的数大就交换下标。此时min和i已经不等了,所以用下面的if语句将a【i】代表的数和
下标最小的那个数交换。
以上就是我对冒泡和选择排序法的理解,若有错误,欢迎在评论区提出,一起交流学习!