python基础算法(水仙花数、冒泡排序,选择排序)
前言
第一次写文章,难免会有错误,大家谅解一下。本文目前讲一下一些基础算法题,水仙花数、冒泡排序、选择排序。本人初入,大佬路过有好的想法请求赐教。
水仙花数
- 水仙花数是指三位数,个位十位百位每个位的3次幂之和等于它本身(核心)。(例如:3^3 + 7^3+ 0^3 = 370)
- 代码实现
冒泡排序
1.从第一个数组元素开始,依次比较相邻两个元素的值,保持大的数值在后边,那么第一次循环过后,最大的一个数就到了最后的位置。第二次循环从0开始到倒数第二个元素,因为最后一个元素已经是最大的了,无需在进行比较,然后重复上述步骤,依次类推。
2.代码实现
逻辑分析:
第一次遍历,最大的数就会移到最后的位置上:
[1,3,5,7,4,2,8,6,9]
第二次遍历,从位置0开始(对应第一个的位置):
[1,3,5,4,2,7,6,8,9]
依次类推得到最后结果为:
[1,2,3,4,5,6,7,8,9]
选择排序
1.原理:取需排序数组的第一个值,作为基准比较值,然后从第二个值开始循环,依次跟这个基准值做比较,如果比基准值小,则交换位置。第二次循环,则取第二个值作为基准值,依此类推。
2.代码实现
这里我还是以’137584296’来举例:
第一次遍历以1为基准,1与后面的做比较,1为最小,不需要交换位置
第二次遍历以3为基准,找到了比3小的数2,则交换位置得:
127584396
第三次遍历以7为基准,找到比7最小的数得:
123584796
依次循环遍历得到:
123456789
冒泡排序与选择排序
冒泡排序和选择排序时间复杂度都为O(n^2),两个循环嘛。冒泡排序一次循环下来可能要交换很多次,但是选择排序只交换一次。在遇到两个相同的数的时候,则不用交换位置,跳过这个数,选择排序是从首位往末位压,而冒泡排序是从末位往首位压。