十大排序算法的Python实现

<pre name="code" class="python">__author__ = 'Qiao'


# 十大排序算法的Python实现


# 1、冒泡排序
def bubble(iarray):
	length = len(iarray)
	for i in range(length):
		for j in range(length - i - 1):
			if iarray[j] > iarray[j + 1]:
				tmp = iarray[j]
				iarray[j] = iarray[j + 1]
				iarray[j + 1] = tmp


# 2、选择排序
def select(iarray):
	length = len(iarray)
	for i in range(length):
		index = 0
		imax = iarray[index]
		for j in range(length - i):
			if iarray[j] > imax:
				imax = iarray[j]
				index = j
		if index != length - i - 1:
			tmp = iarray[index]
			iarray[index] = iarray[length - i - 1]
			iarray[length - i - 1] = tmp


#  3、插入排序
def insert(iarray):
	length = len(iarray)
	for i in range(1, length):
		j = i
		target = iarray[j]

		while j > 0 and target < iarray[j - 1]:
			iarray[j] = iarray[j - 1]
			j -= 1
		iarray[j] = target


# 4、希尔排序
def shell(iarray):
	length = len(iarray)
	gap = length // 2
	while gap:
		for i in range(gap):
			for j in range(i + gap, length, gap):
				target = iarray[j]

				while j > i and target < iarray[j - gap]:
					iarray[j] = iarray[j - gap]
					j -= gap
				iarray[j] = target
		gap //= 2


# 5、归并排序
# 合并两有序数组
def mergearray(iarray, first, mid, last, tmp=list()):
	i, j = first, mid + 1
	m, n = mid, last
	k = 0
	while i <= m and j <= n:
		if iarray[i] <= iarray[j]:
			tmp.insert(k, iarray[i])
			i += 1
		else:
			tmp.insert(k, iarray[j])
			j += 1
		k += 1
	while i <= m:
		tmp.insert(k, iarray[i])
		i += 1
		k += 1
	while j <= n:
		tmp.insert(k, iarray[j])
		j += 1
		k += 1

	for i in range(k):
		iarray[first + i] = tmp[i]


def merge(iarray, first=0, last=7, tmp=list()):
	if first < last:
		mid = (first + last) // 2
		merge(iarray, first, mid, tmp)
		merge(iarray, mid + 1, last, tmp)
		mergearray(iarray, first, mid, last, tmp)


# 6、堆排序
def heap(iarray):
	pass


# 7、快速排序
def quick(iarray):
	pass


# 8、计数排序
def count(iarray):
	pass


# 9、基数排序
def base(iarray):
	pass


# 10、桶排序
def bucket(iarray):
	pass


# 约瑟夫环n = 10, m = 3
def josephuf(n, k):
	link = [x for x in range(1, n + 1)]
	index = 0
	for loop_i in range(n - 1):
		index = (index + k) % len(link)
		index -= 1
		print('Kill:', link[index])
		del link[index]
		if index == -1:  # the last element of link
			index = 0
	print('survive :', link[0])


def choose(num, iarray):
	if num == 1:
		print("冒泡排序:")
		bubble(iarray)
	elif num == 2:
		print("选择排序:")
		select(iarray)
	elif num == 3:
		print("插入排序:")
		insert(iarray)
	elif num == 4:
		print("希尔排序:")
		shell(iarray)
	elif num == 5:
		print("归并排序:")
		merge(iarray)
	elif num == 6:
		print("堆排序:")
		heap(iarray)
	elif num == 7:
		print("快速排序:")
		quick(iarray)
	elif num == 8:
		print("计数排序:")
		count(iarray)
	elif num == 9:
		print("基数排序:")
		base(iarray)
	else:
		print("桶排序:")
		bucket(iarray)


if __name__ == '__main__':
	# array = [2, 1, 3, 5, 2, 7, 9, 8]  # len = 8
	# print("The length of the array:", len(array))
	# print(array)
	# _i = input("请选择:")
	# _i = 5
	# while int(_i):
	# choose(int(_i), array)
	# print(array)
		# _i = input("请选择:")
	josephuf(10, 3)



                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值