
思路Code运行结果swap()函数的详细讲解。
思路冒泡排序重复地走访需要排序的元素列表,依次比较两个相邻的元素,如果顺序(如从大到小或从小到大)错误就交换它们的位置。重复地进行直到没有相邻的元素需要交换,则元素列表排序完成。
比如一个数组的长度为6,那么索引就从0到5;然后首先是从0到5的区间,判断0与1,1与2,2与3,3与4,4与5的索引的大小,如果每次后面的数值比前面的数值小,交换;然后看0到4的区间
;以此往复。最终实现冒泡排序。
# -*- coding:UTF-8 -*-
"""
@Project :左神算法Python源码
@File :冒泡排序.py
@IDE :PyCharm
@Author :Kinght_123
@Date :2022/1/8 10:08
"""
# 冒泡排序
def Bubble_sort(array):
if not array or len(array) < 2:
return
for i in range(len(array), -1, -1):
for j in range(0, i - 1):
if array[j] > array[j + 1]:
# array[j], array[j + 1] = array[j + 1], array[j]
swap(array, j, j + 1)
return array
def swap(array, i, j): # 利用异或的性质
array[i] = array[i] ^ array[j]
array[j] = array[i] ^ array[j]
array[i] = array[i] ^ array[j]
if __name__ == '__main__':
ls = [6, 7, 8, 10, 3, 2, 1, 0]
print(Bubble_sort(ls))
运行结果
[0, 1, 2, 3, 6, 7, 8, 10]swap()函数的详细讲解。
首先需要知道异或的性质。不同的数字异或为1,相同的数字异或为0。我们可以理解为无进位相加。然后异或具有交换律,0异或一个数等于一个数本身,两个相同的数异或等于0。所以我们可以推出如下图所示的交换方法。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)