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

 

posted @ 2020-07-27 23:43  jerrygogo  阅读(193)  评论(0编辑  收藏  举报