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

算法之常见的排序算法

时间:2017-05-19 18:39:43      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:排序   data   插入排序   class   第一个   开始   lag   元素   ram   

一、冒泡排序

@run_time
def bubble_sort(data_list):
    """
    冒泡排序:
    首先拿到第一个元素,和它第二个作比较,看是否交换位置
    第二个再和第三个比较。。。。一轮下来,最后一个就是最大的数
    冒泡都是临近的互相对比找到最大的数据
    :param data_list:
    :return:
    """
    # [6,3,2,7,8,9,5,1,4]
    # []
    for i in range(len(data_list)):
        flag = True  # 做一个标记,看是否在冒泡的过程中发生数据交换
        for j in range(len(data_list) - i - 1):
            # [6,3]做对比,换成[3,6] ,然后 [6,2] 做对比......
            if data_list[j] > data_list[j + 1]:
                data_list[j], data_list[j + 1] = data_list[j + 1], data_list[j]
                flag = False
        if flag:
            # 如果没有发生数据交互,那么数据本身就是排好序的
            break

二、选择排序

@run_time
def select_sort(data_list):
    """
    选择排序:
    不断找到最小的(找最大的也是可以的)
    首先拿到第一个,然后发现比它大的,记住下标,和最左边边交换位置
    都是和最大的数据做对比
    :param data_list:
    :return:
    """
    # [6,3,2,7,8,9,5,1,4]
    for i in range(len(data_list)):
        # 做一个标记
        flag = True
        # 当前元素无序区的第一个元素是最小的
        min_loc = i
        for j in range(i + 1, len(data_list)):
            # 循环遍历无序区
            if data_list[j] < data_list[min_loc]:
                # 如果无序区的元素比假定的小,那将该元素标记为最小的
                min_loc = j
                flag = False
        # 循环遍历结束,将无序区的最小元素和第一个元素的位置做一下交换
        if flag:
            continue
        data_list[i], data_list[min_loc] = data_list[min_loc], data_list[i]

三、插入排序

@run_time
def insert_sort(data_list):
    """
    插入排序:有点像抓牌,插牌
    :param data_list: 将数据传递过来
    :return: 返回有序的list
    """
    for i in range(1, len(data_list)):
        # 从第二数据开始
        for j in range(0, i):
            # 它左边的数字都是有序的
            if data_list[i] < data_list[j]:
                # 如果这数字比左边的某个数字小,则交换这两个数字的位置
                data_list[i], data_list[j] = data_list[j], data_list[i]

 

  

算法之常见的排序算法

标签:排序   data   插入排序   class   第一个   开始   lag   元素   ram   

原文地址:http://www.cnblogs.com/skiler/p/6852846.html

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