arr = [8,3,2,6,1,4,9,7] for i in range(0,len(arr)): for j in range(i+1,len(arr)): if arr[i] >= arr[j]: arr[i],arr[j] = arr[j],arr[i] print(arr)
第一个及第二个循环:从第一个角标开始与之后顺序下每个角标比大小并交换位置
| 38261497 | |
| 28361497 | |
| 28361497 | |
| 18362497 | |
| 18362497 | |
| 18362497 | |
| 18362497 |
即,每次排序将最小的数优先排列于最前,每次循环可少循环一次。
冒泡排序:arr = [8,3,2,6,1,4,9,7] # [3 2 6 1 4 8 9 7] for i in range(0,len(arr)-1): for j in range(0,len(arr)-1-i): if arr[j] >= arr[j+1]: arr[j],arr[j+1] = arr[j+1],arr[j] print(arr)
第一及第二个循环:j在i的循环下为[0,7)--[0,6)--[0,5).....
| 38261497 | 23614897 |
| 32861497 | 23614897 |
| 32681497 | 23164897 |
| 32618497 | 23146897 |
| 32614897 | 23146897 |
| 32614897 | 23146897 |
| 32614897 | 23146879 |
选中第一个角标为j,然后j和j+1比较并交换位置
即,每次循环排序使得j 第一次及第二次循环:i和j均指向一个角标,而j是与j-1作比较的,当j-1没有数了则使i+1同时j也进入新循环 即:红色从右往左,j与j-1作比较并换位置 arr=[7,3,2,0,1,2,3,6] 最大值k为7,则开辟一个长度为k+1,即长度为8的数列,此数列的初始值均为0 设一个走访值为i,令其走过原数列的一个值便在该值对应的新数列角标对应的值下加一。 以此类推,走完原数列后,遍历列表以此打印下数即可arr = [8,3,2,6,1,4,9,7]
for i in range(1,len(arr)):
for j in range(i,0,-1):
if arr[j] <= arr[j-1]:
arr[j],arr[j-1] = arr[j-1],arr[j]
print(arr)
38261497 32861497 23861497 arr = [7,3,2,0,1,2,3,6]
max_num = arr[0]
min_num = arr[0]
for num in arr:
11 . 切片
python分割可迭代的对象
一个完整的切片包含两个":"
语法格式
start_index: 切片切割开始的位置
end_index:切片切割结束的位置,不包含end_index处的元素
step:步长,默认值是1,也可以取负值(从右往左的切割)
以列表 a = [0,1,2,3,4,5,6,7,8,9]为例
1、切割单个值
2、切割完整的对象
if num > max_num:
max_num = num
elif num < min_num:
min_num = num
# print(max_num)
# print(min_num)
#计数列表的长度
len_arr1 = max_num - min_num + 1
#偏移量
offset = min_num
#初始化计数列表 元素全为0
arr1 = [0] * len_arr1
#排序后的列表
arr2 = [0] * len(arr)
#计数
for num in arr: # 7,3,2,0,1,2,3,6
print(num)
arr1[num-offset] += 1 # 0 0 0 0 0 0 0
print(arr1)
index = 0
for i in range(0,len_arr1):
for j in range(0,arr1[i]):
print(i+offset,end=" ")
arr2[index] = i + offset
index += 1
print()
print(arr2)



