#直接插入排序 def insert_sort(L): # 遍历数组中的所有元素,其中0号索引元素默认已排序,因此从1开始 for x in range(1,len(L)): # 将该元素与已排序好的前序数组依次比较,如果该元素小,则交换 # range(x-1,-1,-1):从x-1倒序循环到0 for i in range(x-1,-1,-1): # 判断:如果符合条件则交换 if L[i] > L[i+1]: L[i+1], L[i] = L[i], L[i+1]
#希尔排序 def insert_shell(L): #初始化gap值,此处利用序列长度的一般为其赋值 gap = (int)(len(L)/2) #第一层循环:依次改变gap值对列表进行分组 while (gap >= 1): #下面:利用直接插入排序的思想对分组数据进行排序 #range(gap,len(L)):从gap开始 for x in range(gap,len(L)): #range(x-gap,-1,-gap):从x-gap开始与选定元素开始倒序比较,每个比较元素之间间隔gap for i in range(x-gap,-1,-gap): #如果该组当中两个元素满足交换条件,则进行交换 if L[i] > L[i+gap]: temp = L[i+gap] L[i+gap] = L[i] L[i] =temp #while循环条件折半 gap = (int)(gap/2)
# 简单选择排序 def select_sort(L): #依次遍历序列中的每一个元素 for x in range(0,len(L)): #将当前位置的元素定义此轮循环当中的最小值 minimum = L[x] #将该元素与剩下的元素依次比较寻找最小元素 for i in range(x+1,len(L)): if L[i] < minimum: temp = L[i]; L[i] = minimum; minimum = temp #将比较后得到的真正的最小值赋值给当前位置 L[x] = minimum
# 冒泡排序 def bubble_sort(L): length = len(L) # 序列长度为length,需要执行length-1轮交换 for x in range(1, length): # 对于每一轮交换,都将序列当中的左右元素进行比较 # 每轮交换当中,由于序列最后的元素一定是最大的,因此每轮循环到序列未排序的位置即可 for i in range(0,length-x): if L[i] > L[i+1]: L[i], L[i+1] = L[i+1], L[i]
#************************基数排序**************************** #确定排序的次数 #排序的顺序跟序列中最大数的位数相关 def radix_sort_nums(L): maxNum = L[0] #寻找序列中的最大数 for x in L: if maxNum < x: maxNum = x #确定序列中的最大元素的位数 times = 0 while (maxNum > 0): maxNum = (int)(maxNum/10) times = times+1 return times #找到num从低到高第pos位的数据 def get_num_pos(num,pos): return ((int)(num/(10**(pos-1))))%10 #基数排序 def radix_sort(L): count = 10*[None] #存放各个桶的数据统计个数 bucket = len(L)*[None] #暂时存放排序结果 #从低位到高位依次执行循环 for pos in range(1,radix_sort_nums(L)+1): #置空各个桶的数据统计 for x in range(0,10): count[x] = 0 #统计当前该位(个位,十位,百位....)的元素数目 for x in range(0,len(L)): #统计各个桶将要装进去的元素个数 j = get_num_pos(int(L[x]),pos) count[j] = count[j]+1 #count[i]表示第i个桶的右边界索引 for x in range(1,10): count[x] = count[x] + count[x-1] #将数据依次装入桶中 for x in range(len(L)-1,-1,-1): #求出元素第K位的数字 j = get_num_pos(L[x],pos) #放入对应的桶中,count[j]-1是第j个桶的右边界索引 bucket[count[j]-1] = L[x] #对应桶的装入数据索引-1 count[j] = count[j]-1 # 将已分配好的桶中数据再倒出来,此时已是对应当前位数有序的表 for x in range(0,len(L)): L[x] = bucket[x]