码迷,mamicode.com
首页 > 编程语言 > 详细

python 几个简单算法详解

时间:2017-11-05 10:22:29      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:class   工作   min   循环   简单   tmp   pytho   思想   交换   

一、冒泡排序

基本思想:它的思路很有特点循环,两两向后比较。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。

#冒泡排序
# def bubble_sort(li):
#     for i in range(len(li)-1):   #走一趟,循环的次数
#         for j in range(len(li)-i-1):  #有序列为,len(li)-i,去掉有序不循环
#             if li[j]>li[j+1]:   #如果后一个数大,那就交换
#                 li[j],li[j+1]=li[j+1],li[j]

二、选择排序

基本思想:从所有序列中先找到最小的,然后放到第一个位置。之后再看剩余元素中最小的,放到第二个位置……以此类推,就可以完成整个的排序工作了。

#选择排序
def select_sort(li):
    for i in range(len(li)-1):    #循环趟
        min_loc=i                 #设置i为最小下标
        for j in range(1+i,len(li)-1):    #循环无序区
            if li[min_loc]>li[j]:   #如过不是最小值,就换下标
                min_loc=j
        if min_loc!=i:                #如果下标不是原来的值,就互换
            li[i],li[min_loc]=li[min_loc],li[i]

三、插入排序

基本思想:将列表分为有序区和无序区两个部分,最初有序区只有一个元素,.每次从无序区选择一个元素,插入到无序区的位置,直到无序区变空.

# 插入排序
def insert_sort(li):
    for i in range(1, len(li)):   #走趟,从第一个数开始
        tmp = li[i]              #tmp为无序区手中拿的那张牌
        j = i - 1                #j 为有序区的右侧第一张牌
        while j >= 0 and tmp < li[j]:
            print(li)
            #当 有序区至少一张牌,且有序区右侧第一张牌大于需要插入的牌时
            li[j + 1] = li[j] #有序区右侧第一张牌继续向右移位,
            j = j - 1          #有序区向右移一位,继续让手牌去比较
        li[j + 1] = tmp    #当手牌不比左边的牌大了,将手牌插入

 

python 几个简单算法详解

标签:class   工作   min   循环   简单   tmp   pytho   思想   交换   

原文地址:http://www.cnblogs.com/fengshuihuan/p/7786659.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!