1.Bubble sort(冒泡排序)
它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
代码实现:使用冒泡排序从小到大排序
listc = [6, 37, 25, 40, 34, 60, 16, 20, 49, 10]
for i in range(len(listc)):
for j in range(i+1, len(listc)):
if listc[i] > listc[j]:
listc[i], listc[j] = listc[j], listc[i]
print(listc)
>>>[6, 10, 16, 20, 25, 34, 37, 40, 49, 60]
代码实现:随机生成一个列表用冒泡排序从小到大排序
# 导入随机模块
import random
# 创建一个空列表,用于存放待排序随机数据集
data = [random.randint(0, 100) for i in range(10)]
print('待排序的随机数列: {0}'.format(data))
# 使用嵌套循环实现冒泡排序
# 外层循环控制排序的次数
for i in range(10):
# 内层循环控制每次对比的次数
for j in range(len(data)-1-i):
# 如果前项值大于后项值则对位交换,将大的在列表中后移1位
if data[j] > data[j+1]:
temp = data[j]
data[j] = data[j+1]
data[j+1] = temp
pass
# 输出排序后的结果
print('排序后的有序序列: {0}'.format(data))
>>>待排序的随机数列:[6, 37, 25, 40, 34, 60, 16, 20, 49, 10]
>>>排序后的有序序列:[6, 10, 16, 20, 25, 34, 37, 40, 49, 60]
2.Insertion sort(插入排序)
基本思想:以从小到大排序为例,元素0为第一个元素,插入排序是从元素1开始,尽可能插到前面。插入时分插入位置和试探位置,元素 i 的初始插入位置为i,试探位置为i-1,在插入元素i时,依次与i-1,i-2······元素比较,如果被试探位置的元素比插入元素大,那么被试探元素后移一位,元素i插入位置前移1位,直到被试探元素小于插入元素或者插入元素位于第一位。
代码实现:
lista = [5, 3, 9, 7, 4]
for i in range(1, len(lista)):
for j in range(i, 0, -1):
if lista[j] < lista[j - 1]:
lista[j], lista[j -1] = lista[j - 1], lista[j]
pass
else:
break
pass
pass
print(lista)
>>>[3, 4, 5, 7, 9]
代码实现:随机生成一个列表用插入排序从小到大排序
# 导入随机模块
import random
# 创建一个空列表,用于存放待排序随机数据集
data = [random.randint(0, 100) for i in range(10)]
print('待排序的随机数列: {0}'.format(data))
# 获取列表数据集中随机数的个数
length = len(data)
# 嵌套for循环实现插入排序
# 外层循环控制排序次数
for i in range(1, length):
# 将当前的数字备份
x = data[i]
# 内层循环进行
for j in range(i,-1,-1):
# j为当前位置,试探j-1位置
if x < data[j-1]:
# 换值
data[j] = data[j-1]
else:
break # 确定j位置
data[j] = x
# 输出排序后的结果
print('排序后的有序序列: {0}'.format(data))
>>>待排序的随机数列:[5, 3, 9, 7, 4]
>>>排序后的有序序列:[3, 4, 5, 7, 9]
3.Matrix transposed(矩阵转置)
行列转换其实就是将矩阵n*m 转换成对位的 m*n。
代码实现:用推导式快速实现矩阵转置
A = [[1,2,3,4],[5,6,7,8]]
AT = [[x[i] for x in A]for i in range(len(A[0]))]
print(AT)
>>>[[1, 5], [2, 6], [3, 7], [4, 8]]