算法-排序:lowB三人组

本节内容:

  • lowB介绍
  • 冒泡排序
  • 选择排序
  • 插入排序  

一.lowB介绍

  排序主要看时间复杂度,排序的关键点,有序区和无序区,时间复杂度都是O(n2)

二.冒泡排序

  冒泡思路:

    1.首先,列表每两个相邻的数,如果前面的笔后面的大,那么交换这两个数.

  代码实现关键点:

    1.趟数

    2.无序区

def bubble_sort(li):
    for i in range(len(li)-1):
        for j in range(len(li)-i-1):
            if li[j]>li[j+1]:
                li[j],li[j+1]=li[j+1],li[j]

#把列表中的每个循环一遍,从后面开始走,每个走完有序区就是i
冒泡排序
#如果冒泡排序中执行一趟而没有交换,则列表已经是有序状态,可以直接结束算法。
def bubble_sort(li):
    for i in range(len(li)-1):
        exchange=False
        for j in range(len(li)-i-1):
            if li[j]>li[j+1]:
                li[j],li[j+1]=li[j+1],li[j]
                exchange=True
        if not exchange:
            #说明每个列表中每个元素都有序
                return
冒泡排序_优化

三.选择排序

  选择思路:

    1.一趟遍历记录最小的数,放到第一个位置

    2.再一趟遍历记录剩余列表中最小的数,继续放置

  代码实现关键点:

    1.无序区

    2.最小数的位置

def select_sort(li):
    for i in range(len(li)-1):
        min_loc=i
        for j in range(i+1,len(li))
            if li[j]<li[min_loc]:
                min_loc=j
        if min_loc !=i:
            li[i],li[min_loc]=li[min_loc],li[i]

#默认第一个数最小,遍历后面的所有数,取出第一个索引,然后把后面每个索引上的值和第一上的比较,如果比第一个小就赋值,这样min_loc始终就是最小的值的索引,然后如果min_lock改变,那么调换位置
选择排序

四.插入排序

  插入思路(想想抽扑克牌,理牌):

    1.列表被分为有序区和无序区两个部分,最初有序区只有一个元素。

    2.每次从无序区选择一个元素,插入到有序区的位置,直到无序区变空

  代码实现关键:

    1.摸到的牌

    2.手里的牌

def insert_sort(li):
    for i in range(1,len(li)):
        tmp=li[i]
        j=i-1
        while j>=0 and tmp<li[j]:
            li[j+1]=li[j]
            j=j-1
        li[j+1]=tmp

#暂时没写
插入排序

 

posted @ 2018-02-17 20:00  最咸的咸鱼  阅读(117)  评论(0)    收藏  举报