python16_day39【算法】

复习:

  1.递归

  • 调用自身
  • 结束条件

 

一、冒泡算法

1 def bubble_sort(numbs):
2     for i in range(len(numbs)-1):       # 这个循环负责设置冒泡排序进行的次数。
3         for j in range(len(numbs)-i-1): # j为列表索引, -1为了报错IndexError: list index out of range
4             if numbs[j] > numbs[j+1]:
5                 numbs[j], numbs[j+1] = numbs[j+1], numbs[j]
6     return numbs
7 nums = [5,2,45,6,8,2,1]
8 
9 print(bubble_sort(nums))
bubble_sort

 

二、冒泡优化版

 1 def bubble_sort(numbs):
 2     for i in range(len(numbs)-1):       # 这个循环负责设置冒泡排序进行的次数。
 3         exchange = False
 4         for j in range(len(numbs)-i-1): # j为列表索引, -1为了报错IndexError: list index out of range
 5             if numbs[j] > numbs[j+1]:
 6                 numbs[j], numbs[j+1] = numbs[j+1], numbs[j]
 7                 exchange = True
 8         if not exchange:
 9             break
10     return numbs
11 nums = [5,2,45,6,8,2,1]
12 
13 print(bubble_sort(nums))
14 
15 bubble_sort
View Code


三、快排

 1 import random
 2 import time
 3 
 4 def quick_sort_(data, left, right):
 5     if left < right:
 6         mid = partition(data, left, right)
 7         quick_sort_(data, left, mid - 1)
 8         quick_sort_(data, mid + 1, right)
 9 
10 def partition(data, left, right):
11     tmp = data[left]        # 拿到最左边的数
12     while left < right:     # 左右不碰的时候一直走。
13         while left < right and data[right] >= tmp:  # 从右边找
14             right -= 1  # 如果右边的大,右边向左移
15         data[left] = data[right]  # 如果右边的小,移到左边去。
16         while left < right and data[left] <= tmp:   # 从左边找
17             left += 1
18         data[right] = data[left]
19     data[left] = tmp  # 左右碰上了,就把TMP放回来
20     return left     # 返回mid
21 
22 
23 def quick_sort(data):
24     return quick_sort_(data, 0, len(data)-1)
25 
26 data = list(range(10000))
27 random.shuffle(data)
28 quick_sort(data)
quick_sort

 

posted @ 2017-11-09 22:49  willianflasky  阅读(118)  评论(0编辑  收藏  举报