排序是计算机最为常见的操作之一,排序就是将一组杂乱无章的数据按照一定的规律排序起来(递增或递减),排序的对象可以是数字型,也可以是字符型(按照ASCII码的顺序排列)
N
个元素的列表中找最小值及下标,与第一个元素交换N-1
个元素中找出最小值及其下标,与第二个元素交换N-1
轮后即为排好序的数据# 选择排序
list = [49, 38, 65, 97, 76, 13, 27, 49]
for i in range(len(list) - 1):
m = i
for j in range(i + 1, len(list)):
if list[j] < list[m]:
m = j
list[i], list[m] = list[m], list[i]
print(list)
N-1
轮,总共比较的轮数为(N-1)+(N-2)+...+2+1=N(N-1)/2
次选择排序执行交换的次数是N-1
次
N
个元素中连续的两个元素进行两两比较,如果两者不满足升序关系则交换。第一轮比较过后,最大数将下沉到列表最后。N-1
个元素之间进行两两比较,使第二大的数字沉到最后list = [77, 42, 35, 10, 22, 101, 5]
for i in range(len(list) - 1):
for j in range(len(list) - 1 - i):
if list[j] > list[j + 1]:
list[j], list[j + 1] = list[j + 1], list[j]
print(list)
# 改进
list = [77, 42, 35, 10, 22, 101, 5]
for i in range(len(list) - 1):
flag = True
for j in range(len(list) - 1 - i):
if list[j] > list[j + 1]:
list[j], list[j + 1] = list[j + 1], list[j]
flag = False
if flag:
break
print(list)
N-1
轮,总共比较次数为(N-1)+(N-2)+...+2+1=N(N-1)/2
次# 自定义函数的定义
def 函数名([形参列表]):
函数体
# 函数的调用
函数名([实参列表])
# 例子:定义一个求平均值的函数
def average(a, b):
return (a + b / 2)
temp = average(1, 3)
print(temp)
import math
def isPrime(a):
m = int(math.sqrt(a))
for i in range(2, m + 1):
if a % i == 0:
return False
return True
for i in range(2, 200):
if isPrime(i):
print(i)
def bubbleSort(a):
for i in range(len(a) - 1):
for j in range(len(a) - 1 - i):
if a[j] > a[i]:
a[j], a[i] = a[i], a[j]
list = [77, 42, 35, 10, 22, 101, 5]
bubbleSort(list)
print(list)
# 非递归方法
def factorial(n):
s = 1
for i in range(1, n + 1):
s = s * i
return s
# 递归方法
def factorial(n):
if n == 1:
return 1
else:
s = n * factorial(n - 1)
return s
print(factorial(3))
N/2
个元素的子列表N
个子列表)def merge(left, right): # 合并两个列表
merged = []
i, j = 0, 0 # i和j分别作为left和right的下标
left_len, right_len = len(left), len(right) # 分别获取左右列表的长度
while i < left_len and j < right_len: # 循环归并左右子列表元素
if left[i] <= right[j]:
merged.append(left[i]) # 归并左子列表元素
i += 1
else:
merged.append(right[j]) # 归并右子列表元素
j += 1
merged.extend(left[i:]) # 归并左子列表剩余元素
merged.extend(right[j:]) # 归并右子列表剩余元素
print(left, right, merged) # 跟踪调试
return merged # 返回归并好的列表
def mergeSort(a): # 归并排序
if len(a) <= 1: # 空或者只有一个元素,直接返回列表
return a
mid = len(a) // 2 # 列表中间位置
left = mergeSort(a[:mid]) # 归并排序左子列表
right = mergeSort(a[mid:]) # 归并排序右子列表
return merge(left, right) # 合并排好序的左右两个子列表
a = [98, 23, 11, 10, 33, 42]
temp = mergeSort(a)
print(temp)
python语言系统提供的排序算法,底层就采用了归并排序算法实现
a = sorted([24, 8, 10, 35])
print(a)
# [8, 10, 24, 35]
a.sort(reverse=True)
print(a)
# [35, 24, 10, 8]
b = sorted(a)
print(b)
# [8, 10, 24, 35]
c = sorted(a, reverse=True)
print(c)
# [35, 24, 10, 8]