排序
一、排序算法
-
排序是计算机内经常进行的一个操作,其目的是将一组“无序”的序列调整为有序的序列。
程序:数据结构+算法
-
常见八大排序算法
冒泡排序、选择排序、插入排序、归并排序、快速排序、堆排序、基数排序、Shell排序.
二、冒泡排序
-
冒泡排序是一种简单的基本的排序算法。
-
算法原理: [9,8,7,5,6,4,3,2,1]
- 比较相邻的两个元素,如果第一个比第二个大,则交换它们两个
- 对每一对相邻的元素要做相同的工作,从开始的第一对直到最后一对,最后的元素就会是最大的数
- 针对所有的元素重复以上的步骤,除了最后一个
依次比较相邻的两个数,将小数放前面,大数放后面
import random
a = []
for i in range(10):
a.append(random.randint(0, 100))
print('排序前:', a)
# 从小到大
for i in range(len(a)-1):
for j in range(len(a) - 1 - i):
if a[j] > a[j + 1]:
a[j], a[j + 1] = a[j + 1], a[j]
print('排序后:', a)
# 从大到小
for i in range(len(a)-1):
for j in range(len(a) - 1 - i):
if a[j] < a[j + 1]:
a[j], a[j + 1] = a[j + 1], a[j]
print('排序后:', a)
三、选择排序
- 原理:每一趟从待排序的序列中选出最大或最小的一个元素,顺序放在已排好序的最后。
- [49, 38, 65, 97, 76, 13, 27, 49]
[49, 38, 65, 97, 76, 13, 27, 49] - > [13, 38, 65, 97, 76,49, 27, 49]-> [13, 27, 65, 97, 76,49, 38, 49]
import random
a = []
for i in range(10):
a.append(random.randint(0, 100))
print('排序前:', a)
for i in range(len(a)):
# 找一个最小值的下标
min = i
for j in range(i+1,len(a)):
if a[min] > a[j]:
min = j
a[min], a[i] = a[i], a[min]
print('排序后:',a)
# 1. 思想 2. 转代码
四、插入排序
- 思想:现在已经有一个有序的序列了,要求在这个已经的数据序列中,再插入一个数
- 插入排序是将序列分为两部分,最开始的时候第一个数就是一个有序部分,剩下的部分为无序部分,每次取无序部分中的第一个数和无序部分进行比较,放入到有序部分中的合适的位置
- [65,27,59,64,58]
[65] [27,59,64,58]
[65] [27,59,64,58]
->[27,65] [59,64,58]
->[27,65] [64,58]
import random
a = []
for i in range(10):
a.append(random.randint(0, 100))
print('排序前:', a)
# 取无序部分的第一个元素,和有序部分进行比较,放在合适的位置
# [65,27,59,64,58]
# [20,27,59,65,65,,20]
for i in range(len(a) - 1):
for j in range(i + 1, 0, -1):
if a[j] < a[j - 1]:
a[j], a[j - 1] = a[j - 1], a[j]
else:
break
print('排序后:', a)