在做排序算法练习时,感觉就是找如何让数据移动次数最少的方法。以下是代码:
def select_sort(nums): """这个是原地排序""" for i in range(len(nums),0,-1): m = nums[0] p = 0 for j in range(1,i): if nums[j]>m: m = nums[j] p = j nums[i-1],nums[p] = nums[p],nums[i-1] def insert_sort(nums): """这个不是原地排序""" t = [nums[0]] for i in range(1,len(nums)): for j in range(len(t)): # 找位置 if nums[i]<=t[j]: t.insert(j,nums[i]) break else: t.append(nums[i]) return t def shell_sort(nums): for gap in range(len(nums)//2,0,-1): start = 0 while start+gapnums[start + gap]: nums[start],nums[start + gap] = nums[start + gap],nums[start] start += gap return insert_sort(nums) def mid_sort(nums): """本人自己设计的排序方法 mid表示中间的一个数据的索引号 mid左边的一个数和mid要身开始做为右边的一个数,进行比较, 如果左边的数更大,则交换,(默认从小到大排序) 一直到left或者right超出范围,再把mid增加1,这样就进行了一轮比较了。 这个时候,可能还有没有排好序的数据,再把mid设为1从新开始,直到没有任何一次交换数据, 则整个数据排序结束。 """ while True: flag = False mid = 1 while mid =0 and right
发表评论