在做排序算法练习时,感觉就是找如何让数据移动次数最少的方法。以下是代码:
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
