选择排序基本概念
- 1.选择排序
- 1.1 基本概念
- 1.2 选择排序执行步骤有
- 1.3 对于5个元素的值步骤次数
- 1.4 选择排序大O记法表示
- 2. 将[4,2,7,1,3]进行选择排序 【实战】
- 2.1 第一次轮回步骤
- 2.2 第二次轮回步骤
- 2.3 第三次轮回步骤
- 2.4 第四次轮回步骤
- 3.选择排序代码实现
-
1.选择排序
1.1 基本概念
- 选择排序效率比冒泡排序高,但是大O记法一样
- 操作步骤
- 根据最小值
- 从左至右依次检查数据,找出值最小的那个。
- 在此过程中,会用一个变量记录检查过的最小值的索引,如果未检查的数值小于最小值,就把最小值改为新的索引
- 根据最大值
- 从左至右依次检查数据,找出值最大的那个。
- 在此过程中,会用一个变量记录检查过的最大值的索引,如果未检查的数值大于最大值,就把最大值改为新的索引
1.2 选择排序执行步骤有
1.3 对于5个元素的值步骤次数
次数 | 第一轮回 | 第二轮回 | 第三轮回 | 第四轮回 |
---|
对比次数 | 4 | 3 | 2 | 1 |
交换次数【按照最多交换次数计算】 | 1 | 1 | 1 | 1 |
1.4 选择排序大O记法表示
N个元素 | 最多步骤【比较+交换】 |
N
2
2
\frac{N^2}{2}
2N2 |
---|
5 | 10+4=14 | 12.5 |
10 | 45+9=54 | 50 |
20 | 180+19=199 | 200 |
40 | 780+39=819 | 800 |
80 | 3160+79=3239 | 3200 |
- 发现,随着N的增长,步数大致增长为
N
2
2
\frac{N^2}{2}
2N2
- 选择排序的大O记法:O(
N
2
N^2
N2)【大O记法忽略常数】
2. 将[4,2,7,1,3]进行选择排序 【实战】
2.1 第一次轮回步骤
2.2 第二次轮回步骤
2.3 第三次轮回步骤
2.4 第四次轮回步骤
3.选择排序代码实现
3.1 根据最小值排序
alist = [4, 2, 7, 1,3]
def sort(alist):
for i in range(len(alist)-1):
min_index = i
for j in range(i+1,len(alist)):
if alist[j]<alist[min_index]:
min_index = j
alist[i],alist[min_index]=alist[min_index],alist[i]
print(f"第{i + 1}次轮回结果为:", alist)
sort(alist)
alist = [4, 2, 7, 1,3]
def sort(alist):
for i in range(len(alist)-1):
min_index = i
for j in range(i+1,len(alist)):
if alist[j]<alist[min_index]:
min_index = j
if min_index!=i:
alist[i],alist[min_index]=alist[min_index],alist[i]
print(f"第{i + 1}次轮回结果为:", alist)
sort(alist)
3.2 根据最大值排序
alist = [3, 8, 5, 7, 6]
def sort(alist):
for i in range(len(alist)-1):
max_index = 0
for j in range(1,len(alist)-i):
if alist[j]>alist[max_index]:
max_index = j
alist[len(alist)-1-i],alist[max_index]=alist[max_index],alist[len(alist)-1-i]
print(f"第{i + 1}次轮回结果为:", alist)
sort(alist)
alist = [3, 8, 5, 7, 6]
def sort(alist):
for i in range(len(alist) - 1):
max_index = 0
for j in range(1, len(alist) - i):
if alist[j] > alist[max_index]:
max_index = j
if max_index != i:
alist[len(alist) - 1 - i], alist[max_index] = alist[max_index], alist[len(alist) - 1 - i]
print(f"第{i + 1}次轮回结果为:", alist)
sort(alist)