标签:情况下 class 图片 增量排序 shell 冒泡 处理 常用 sort
相邻元素两辆比较,大的往后放.第一次将数据遍历完成之后,最大值就出现在了最大的索引处.同理,即可得到一个排好序的数组.
过程图解:
代码实现
第一次遍历代码
def sort(alist):
for i in range(len(alist)-1):
if alist[i] > alist[i + 1]:
alist[i], alist[i + 1] = alist[i + 1], alist[i] # 大值放后面
return alist
完整代码
def sort(alist):
for j in range(len(alist) - 1): # 控制遍历的次数
for i in range(len(alist) - 1 - j): # 控制比较的次数
if alist[i] > alist[i + 1]:
alist[i], alist[i + 1] = alist[i + 1], alist[i]
return alist
alist = [2, 1, 4, 6, 3]
print(sort(alist))
选择排序改进了冒泡排序,每次遍历只做一次交换.例如:每次遍历都找到最大值,将最大值放到最后的位置
流程图解:
代码实现
第一次遍历
def sort(alist):
max = 0 # 假定索引为0的值最大
for i in range(len(alist) - 1):
if alist[max] < alist[i + 1]:
max = i + 1
alist[max], alist[len(alist) - 1] = alist[len(alist) - 1], alist[max]
return alist
完整代码
def sort(alist):
for j in range(len(alist) - 1, 0, -1): # 控制遍历次数
max = 0 # 假定索引为0的值最大
for i in range(j): # 控制比较次数
if alist[max] < alist[i + 1]:
max = i + 1
# 将最大值放置到列表末尾的位置
alist[max], alist[j] = alist[j], alist[max]
return alist
alist = [2, 1, 4, 6, 3]
print(sort(alist))
代码实现插入排序
step1
i = 1#表示的是列表中左部分有序部分的数据个数,其次还需要让i充当列表的下标
if alist[i] < alist[i-1]:
alist[i],alist[i-1] = alist[i-1],alist[i]
i += 1
step2
i = 2
#alist[i]乱序部分的第一个数据
#alist[i-1]:有序部分的第二个数
while i >= 1:
if alist[i] < alist[i-1]:
alist[i],alist[i-1] = alist[i-1],alist[i]
i -= 1
else:
break
完整代码
def sort(alist):
for i in range(1, len(alist)):
while i > 0: # 与有序段全部数据比较
if alist[i] < alist[i - 1]:
alist[i], alist[i - 1] = alist[i - 1], alist[i]
i -= 1
return alist
alist = [2, 1, 4, 6, 3]
print(sort(alist))
希尔排序:特殊的插入排序,或者说插入排序就是增量为1的希尔排序
代码实现希尔排序
增量为1的希尔排序
gap = 1
for i in range(1,len(alist)):
#alist[i]乱序部分的第一个数据
#alist[i-1]:有序部分的第二个数
while i >= 1:
if alist[i] < alist[i-1]:
alist[i],alist[i-1] = alist[i-1],alist[i]
i -= 1
else:
break
print(alist)
step 1
# 增量为gap的希尔排序
def sort(alist):
gap = len(alist) // 2
#将增量设置成gap
for i range(gap,len(alist)):
while i > 0 :
if alist[i] < alist[i-gap]:
alist[i],alist[i-gap] = alist[i-gap],alist[i]
i -= gap
else:
break
完整代码
#继续缩小增量
def sort(alist):
gap = len(alist) // 2
while gap >= 1:
#将增量设置成gap
for i in range(gap,len(alist)):
while i > 0 :
if alist[i] < alist[i-gap]:
alist[i],alist[i-gap] = alist[i-gap],alist[i]
i -= gap
else:
break
gap //= 2
return alist
快速排序
代码实现快速排序:
第一次排序
def sort(alist):
low = 0
high = len(alist)-1
#基准:最左侧的数值
mid = alist[low]
#low和high的关系只能是小于,当等于的时候就要填充mid了
while low < high:
while low < high:
if alist[high] > mid:
high -= 1
else:
alist[low] = alist[high]
break
while low < high:
if alist[low] < mid:
low += 1
else:
alist[high] = alist[low]
break
#当low和high重复的时候,将mid填充
if low == high:
alist[low] = mid #or alist[high] = mid
break
return alist
完整代码
def sort(alist,start,end):
low = start
high = end
if low > high: # 递归结束条件
return
mid = alist[low]
while low < high:
while low < high:
if alist[high] > mid:#将high向左偏移
high -= 1
else:
alist[low] = alist[high]
break
while low < high:
if alist[low] < mid:#向右移动low
low += 1
else:
alist[high] = alist[low]
break
if low == high:
alist[low] = mid#alist[high] = mid
#将sort的操作作用到基数左侧部分
sort(alist,start,low-1)
#将sort的操作作用的基数右侧部分
sort(alist,high+1,end)
return alist
标签:情况下 class 图片 增量排序 shell 冒泡 处理 常用 sort
原文地址:https://www.cnblogs.com/bigox/p/11626584.html