排序规则
- 排序:将数据通过某种手段或规则转为递增或递减形式;
- 数据操作:直接移动和逻辑移动;
- 直接移动:数据存放的位置交换;
- 逻辑移动:仅交换指向数据存储地址的指针;
- 排序分类:
-
简单排序:冒泡排序(稳定)、希尔排序(稳定)、插入排序(稳定)、选择排序(不稳定)
-
复杂排序:归并排序(不稳定)、快速排序(不稳定)、基数排序(稳定)、堆积排序(不稳定)
- 冒泡排序
时间复杂度:O (n^2);
空间复杂度:O(1);
平均移动:n*(n-1)/2;
最好情况:n-1比较、O(n) 时间复杂度; - 选择排序
时间复杂度:O (n^2);
空间复杂度:O(1);
平均移动:n*(n-1)/2;
最好情况:n-1比较、O(n) 时间复杂度;
代码部分
- 冒泡排序
def Bubble(base_array):
for i in range(len(base_array) - 1, -1, -1):
flag = 0
for j in range(i):
if base_array[j] > base_array[j + 1]:
base_array[j], base_array[j + 1] = base_array[j + 1], base_array[j]
flag = 1
if flag == 0:
break
print("第", len(base_array) - i, base_array)
if __name__ == '__main__':
array = [16, 25, 39, 27, 12, 8, 45, 63]
Bubble(array)
- 选择排序
def Select(arr):
for i in range(len(arr) - 1):
flag = 0
for j in range(i + 1, len(arr)):
if arr[i] > arr[j]:
arr[i], arr[j] = arr[j], arr[i]
flag = 1
if flag == 0:
break
print("第", i+1, "次", arr)
if __name__ == '__main__':
array = [16, 25, 39, 27, 12, 8, 45, 63]
Select(array)