VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > temp > python入门教程 >
  • python 算法 一

 
  • 二分查找算法

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def list_search(l,v):
    left = 0
    right = len(l) -1
    while left <= right:
        mid = (left + right) // 2
        if l[mid] == v:
            return mid
        elif l[mid] < v:
            left = mid +1
        else:
            right = mid -1
    else:
        return None
= list(range(100))
= list_search(l,50)
print(s)

 

个人总结:查找的值所在的数据类型中以数据中心的值分割,如果等于则找到,如果小于中心值,查找的值在右部分,重新定义左边最后一个值,就是中心值加一,大于,值在左,重新定义右边值,减一,直到找到,否则返回none。

 

  • 排序算法

1.冒泡排序:

                   

 

 

 

1
2
3
4
5
6
7
8
9
10
import random
def bubble_sort(l):
    for in range(len(l)-1):<br data-filtered="filtered">     exchange = False
        for in range(len(l)-i-1):
            if l[x] > l[x+1]:
                l[x], l[x+1= l[x+1],l[x]<br data-filtered="filtered">          exchange = True<br data-filtered="filtered">     if not exchange:<br data-filtered="filtered">        return<br data-filtered="filtered">
 
= [random.randint(1,10for in range(10)]
= bubble_sort(l)
print(l)

  个人总结:比较,i比较几次,(索引0-9,长度是十个所以减一,不然多循环一次),减去比较完的次数,在减一,比较大于正序,调换,小于反序。定义一个bool,如果走了调换位置,就设置为True,没有走的话,就证明已经排序完成了,就直接返回。

 

 2.选择排序

 

1
2
3
4
5
6
7
8
9
10
def select_sort(l):
    for in range(len(l)-1):
        min = i
        for in range(i,len(l)):
            if l[x] < l[min]:
                min = x<br data-filtered="filtered">     l[i],l[min= l[min],l[i]
 
= [random.randint(1,10for in range(10)]
select_sort(l)
print(l)

  循环一个然后和后面的值循环比较,比我小,换你来当最小的,换位,大,直接换。

 

3.插入排序

1
2
3
4
5
6
7
8
9
10
11
12
def insert_sort(l):
    for in range(1,len(l)):
        tmp = l[i]
        = i-1 #后面的值
        while j >=0 and l[j] > tmp:
            l[j+1= l[j]  #把j的位置向前面移动一位
            -= 1  #和后面的继续比较
        l[j+1= tmp   #循环结束条件不成立,索引负数,比j大的直接插
 
= [1,6,5,8,9,7,3,4,2]
insert_sort(l)
print(l)

  

#从第一个值开始比较,第0个是比较对象

 

 快排

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
def partition(l,left,right):
    tmp = l[left]
    while left < right:
        while left < right and l[right] > tmp :
            right -=1
        l[left] = l[right]
        while left < right and l[left] < tmp :
            left += 1
        l[right] = l[left]
    l[left] = tmp
    return left
 
def quick_sort(l,left,right):
    if left < right:
        mid = partition(l,left,right)
        #递归
        quick_sort(l,left,mid-1)  #左边在重新快排
        quick_sort(l,mid+1,right) #右边在重新快排
 
= [63485291,17,7,10,11]
quick_sort(l,0,len(l)-1)
 
print(l)

  循环左边之和右边的值,拿第一个值,和最右边的值比较比tmp大向左边就继续找,比tmp小就把它换到左边,左边的相反操作,最后把tmp放到中间的位置,然后把tmp返回。

 

出处:https://www.cnblogs.com/humorous-ecg/p/14961847.html



相关教程