经典算法

 1 #!/usr/bin/env python
 2 # 冒泡排序
 3 def bubbleSort(nums):
 4     count = len(nums)  #需要排序的列表长度
 5     for i in range(count):  #这个循环负责设置冒泡排序进行的次数(比如说n个数,则只要进行n-1次冒泡,就可以把这个n个数排序好,对吧)
 6         for j in range(count-i-1):  # -1 是因为每次比对的都 是i 与i +1,不减1的话,最后一次对比会超出list 获取范围,-j是因为,每一次大的循环就代表排序好了一个最大值,放在了列表最后面,下次大循环就不用再运算已经排序好了的值了
 7             if lst[j] > lst[j+1]:
 8                 lst[j],lst[j+1] = lst[j+1],lst[j]  #如果前面的值大于后面的值,就交换两个数值的位置
 9     return nums
10 
11 lst = [12,32,-9,33,0,-3,88,37,98,2]
12 print(lst)
13 print(bubbleSort(lst))

 

 1 #!/usr/bin/env python
 2 # 选择排序
 3 def selectionSort(nums):
 4     count = len(nums) #排序数组的长度
 5     for i in range(count-1):
 6         min_index = i
 7         for j in range(i+1,count):
 8             if nums[j] < nums[min_index]:
 9                 min_index = j
10         nums[min_index],nums[i] = nums[i],nums[min_index]
11     return nums
12 lst = [12, 32, -9, 33, 0, -3, 88, 37, 98, 2]
13 print(lst)
14 print(selectionSort(lst))

 1 #!/usr/bin/env python
 2 #快速排序
 3 def quickSort(nums):
 4     if len(nums) < 2:
 5         return nums     #递归退出程序的出口
 6     mid = nums[len(nums) // 2]    #确定中间值得位置,并以该值为基准值
 7     left, right = [] ,[]    #分布创建两个列表,左边用来保存小于基准值得值,右边用来保存大于基准值得值
 8     nums.remove(mid)    #删除需要排序中的基准值
 9     for item in nums:
10         if item >= mid:
11             right.append(item)  #大于基准值添加到右边的列表
12         else:
13             left.append(item)   #小于基准值添加到左边的列表
14     return quickSort(left)+[mid]+quickSort(right)   #返回递归调用的结果
15 lst = [12, 32, -9, 33, 0, -3, 88, 37, 98, 2]
16 print(lst)
17 print(quickSort(lst))

 

 1 #!/usr/bin/env python
 2 # 插入排序
 3 def insertSort(nums):
 4     length = len(nums)
 5     for i in range(1,length):
 6         j = i - 1
 7         for j in range(i):
 8             if nums[j] > nums[i]:
 9                 nums[j],nums[i] = nums[i],nums[j]
10     return nums
11 lst = [12, 32, -9, 33, 0, -3, 88, 37, 98, 2]
12 print(lst)
13 print(insertSort(lst))

 

 

 

 

posted @ 2020-08-20 19:43  清风与我_PY  阅读(86)  评论(0)    收藏  举报