python 实现冒泡排序,选择排序,插入排序
python 实现冒泡排序和选择排序
冒泡排序:
- 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
- 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
- 针对所有的元素重复以上的步骤,除了最后一个。
- 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| 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)
|
选择排序:
对比数组中前一个元素跟后一个元素的大小,如果后面的元素比前面的元素小则用一个变量k来记住他的位置,接着第二次比较,前面“后一个元素”现变成了“前一个元素”,继续跟他的“后一个元素”进行比较如果后面的元素比他要小则用变量k记住它在数组中的位置(下标),等到循环结束的时候,我们应该找到了最小的那个数的下标了,然后进行判断,如果这个元素的下标不是第一个元素的下标,就让第一个元素跟他交换一下值,这样就找到整个数组中最小的数了。然后找到数组中第二小的数,让他跟数组中第二个元素交换一下值,以此类推。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| 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)
|
插入排序
- 思想:现在已经有一个有序的序列了,要求在这个已经的数据序列中,再插入一个数
- 插入排序是将序列分为两部分,最开始的时候第一个数就是一个有序部分,剩下的部分为无序部分,每次取无序部分中的第一个数和无序部分进行比较,放入到有序部分中的合适的位置
- [65,27,59,64,58]
[65] [27,59,64,58]
[65] [27,59,64,58]
-> [27,65] [59,64,58]
-> [27,65] [64,58]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| 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(i + 1, 0, -1): if a[j] < a[j - 1]: a[j], a[j - 1] = a[j - 1], a[j] else: break
print('排序后:', a)
|