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