zoukankan      html  css  js  c++  java
  • Python 排序算法

    1、快速排序:首先要打乱序列顺序 ,以防算法陷入最坏时间复杂度。对于一串序列,首先从中选取一个数,凡是小于这个数的值就被放在左边一摞,

                            凡是大于这个数的值就被放在右边一摞。然后,继续对左右两摞进行快速排序。直到进行快速排序的序列长度小于 2 (即序列中只有一个值或者空值)。

    import random
    def quicksort(seq):
        if len(seq)<2:
            return seq
        else:
            base = seq[0]
            left = [i for i in seq[1:] if i<base]
            right = [i for i in  seq[1:] if i>base]
            return quicksort(left)+[base]+quicksort(right)
    
    
    seq = [7,5,6,3,8,1]
    random.shuffle(seq)
    print(quicksort(seq))

    2:冒泡排序:冒泡排序(顺序形式),从左向右,两两比较,如果左边元素大于右边,就交换两个元素的位置。其中,每一轮排序,序列中最大的元素浮动到最右面。

          也就是说,每一轮排序,至少确保有一个元素在正确的位置。

    def bubble_sort(seq):
        n = len(seq)
        for i in range(n):
            for j in range(1,n-i):
                if seq[j-1]>seq[j]:
                    seq[j],seq[j-1] = seq[j-1],seq[j]
        return seq
    
    
    seq = [1,8,6,2,4]
    print(bubble_sort(seq))

    3、选择排序:设第一个元素为比较元素,依次和后面的元素比较,比较完所有元素找到最小的元素,将它和第一个元素互换,重复上述操作,

          我们找出第二小的元素和第二个位置的元素互换,以此类推找出剩余最小元素将它换到前面,即完成排序。

    def selection_sort(seq):
        #循环选择次数
        for i in range(len(seq)-1):
            #初始化最小元素
            min_index = i
            #之后的元素与最小元素比较
            for j in range(i,len(seq)-1):
                if seq[j]<seq[min_index]:
                    #如果当前元素比最小元素小,当前元素作为最小元素
                    min_index = j
            #最小元素与起始元素互换
            seq[min_index],seq[i] = seq[i],seq[min_index]
        return seq
    
    seq = [1,5,3,2,6]
    print(selection_sort(seq))
    #查找最小元素,返回其索引
    def find_min(arr):
        return arr.index(min(arr))
    #移除最小元素、添加到新的空列表
    def selector_sort(arr):
        new_arr = []
        while arr:
            min_index = find_min(arr)
            new_arr.append(arr.pop(min_index))
        return new_arr
    
    arr = [6,2,4,5,1]
    print(selector_sort(arr))

    4、插入排序:第一个元素可以被认为已经被排序,从第二个元素开始操作。从第二个元素开始和前面的元素进行比较,如果前面的元素比当前元素大,

          则将前面元素 后移,当前元素依次往前,直到找到比它小或等于它的元素插入在其后面。然后操作第三个元素重复上述步骤。

    def insertion_sort(nums):
        #遍历次数:从第二个元素开始
        for i in range(1,len(nums)):
            #设置当前元素
            current = nums[i]
            
            #当前元素前面的元素:参比元素
            pre_index = i-1
    
            #参比元素大于当前元素
            while pre_index>=0 and nums[pre_index]>current:
                #参比元素后移
                nums[pre_index+1] = nums[pre_index]
                #向前选择下一个参比元素
                pre_index -=1
            #参比元素小于当前元素,当前元素插入参比元素之后
            nums[pre_index+1] = current
        return nums
  • 相关阅读:
    (ZOJ 3329) One Person Game (概率DP)
    python爬虫之json数据处理
    1034 Head of a Gang 图的遍历,map使用
    1030 Travel Plan Dijkstra+dfs
    vs C++ scanf 不安全
    1021. Deepest Root DFS 求最长无环路径
    1013. Battle Over Cities 用dfs计算联通分量
    无法解析的外部符号
    PAT DFS,BFS,Dijkstra 题号
    1004 Counting Leaves 对于树的存储方式的回顾
  • 原文地址:https://www.cnblogs.com/yijierui/p/13388583.html
Copyright © 2011-2022 走看看