Python中的四种排序(冒泡,插入,选择,快速)以及杨辉三角实例解析

四种排序方法是学习理解编程语言的需要,本文只是简单举例并贴出代码,不做详细的算法原理解析!

冒泡排序

冒泡排序是最为基础的算法,需要理解和掌握,它是对序列进行遍历交换的过程,大的元素移动到末尾,直到队列有序!
原理图

nums = [[1,9,8,5,6,7,4,3,2]
print(nums)
length = len(nums)
count_swap = 0
count = 0
for i in range(length):
    for j in range(length-i-1):
        count += 1
        if nums[j] > nums[j+1]:
            tmp = nums[j]
            nums[j] = nums[j+1]
            nums[j+1] = tmp
            count_swap += 1
print(nums,count_swap,count)

时间复杂度:O(n²)

插入排序

插入排序是默认当前的序列有序,将新元素插入到应该在的位置!

def insert_sort(array):
    for i in range(len(array)):
        for j in range(i):
            if array[i] < array[j]:
                array.insert(j, array.pop(i))                
                break        
    return array
print(insert_sort([4,5,2,6,8]))

时间复杂度:O(n²)

选择排序

选择排序的原理比较简单,首先它是将第一个元素和剩下的元素进行逐个比较,把最小的元素交换到最前面的位置,接下来再把第二个元素和第三个到最后一个比较,找出第二小的元素放到第二个位置,以此类推!

def select_sort(array):
    for i in range(len(array)):
        x = i  # min index
        for j in range(i, len(array)):
            if array[j] < array[x]:
                x = j
        array[i], array[x] = array[x], array[i]
    return array
print(select_sort([4,5,2,6,8]))

时间复杂度:O(n²)

快速排序

快速排序的原理就是设置2个标杆,将序列一分为二,一个从前往后遍历,一个从后到前遍历,将二者进行比较,当左侧的数据大于右侧的,数据交换,当比较到最后一个共同的数据时,遍历结束!此时,左侧标杆的数据都小于右侧的,再对左右2个标杆的数据进行递归得出序列!

def quick_sort(array):
    def recursive(begin, end):
        if begin > end:
            return
        l, r = begin, end
        pivot = array[l]
        while l < r:
            while l < r and array[r] > pivot:
                r -= 1
            while l < r and array[l] <= pivot:
                l += 1
            array[l], array[r] = array[r], array[l]
        array[l], array[begin] = pivot, array[l]
        recursive(begin, l - 1)
        recursive(r + 1, end)

    recursive(0, len(array) - 1)
    return array
print(quick_sort([4,5,2,6,8]))

时间复杂度:O(nlog₂n)

杨辉三角

杨辉三角定义图
这里写图片描述

triangle = []
n = 6
for i in range(0,n):
    if i == 0:
        triangle.append(1)
        print(triangle)
    else:
        pre = triangle[i - 1]
        cur = [1]
        for j in range(0,i - 1):
            if j == None:
                break
            else:
                cur.append(pre[j] + pre[j+1])
        cur.append(1)
        triangle.append(cur)
        print(cur)
print(triangle)   //杨辉三角
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 以下是Python打印杨辉三角的示例代码: ```python def print_triangle(n): triangle = [] for i in range(n): row = [1] * (i + 1) for j in range(1, i): row[j] = triangle[i - 1][j - 1] + triangle[i - 1][j] triangle.append(row) for row in triangle: print(' '.join([str(num) for num in row]).center(n*2)) print_triangle(6) ``` 输出结果: ``` 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 ``` ### 回答2: 杨辉三角是一个经典的数学问题,可以使用Python快速打印出来。下面是代码实现: ```python def print_pascal_triangle(n): # 创建一个空列表来存储杨辉三角的数据 triangle = [] # 逐行生成杨辉三角的数据 for i in range(n): # 每行开始和结束的数字为1 row = [1] # 当前行的数据是上一行数据的相邻两个数字之和 if i > 0: for j in range(i-1): row.append(triangle[i-1][j] + triangle[i-1][j+1]) # 每行结束的数字也为1 if i > 0: row.append(1) # 将当前行数据添加到杨辉三角列表 triangle.append(row) # 打印当前行数据 print(' ' * (n-i-1), end='') print(' '.join(str(num) for num in row)) # 返回杨辉三角列表 return triangle n = 6 # 打印6行的杨辉三角 print_pascal_triangle(n) ``` 运行以上代码,将会打印出6行的杨辉三角形: ``` 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 ``` 以上就是使用Python快速打印杨辉三角的方法。 ### 回答3: 杨辉三角是由数列构成的三角形,数列的每个数字是由上方相邻两个数字相加得到的。下面是使用Python快速打印杨辉三角的方法: 首先,我们定义一个函数yanghui_triangle,该函数接受一个参数n,表示杨辉三角的行数。 ```python def yanghui_triangle(n): triangle = [] # 声明一个空列表,用于存储每行的数字 for i in range(n): row = [] # 声明一个空列表,用于存储当前行的数字 for j in range(i + 1): if j == 0 or j == i: row.append(1) # 每行的第一个和最后一个数字都为1 else: row.append(triangle[i - 1][j - 1] + triangle[i - 1][j]) # 其他数字为上方相邻两个数字的和 triangle.append(row) # 将当前行添加到triangle列表 return triangle ``` 然后,我们调用这个函数来打印杨辉三角。 ```python n = 5 # 假设要打印5行的杨辉三角 result = yanghui_triangle(n) for row in result: for num in row: print(num, end=' ') print() ``` 运行上述代码,将会输出如下结果: ``` 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 ``` 通过这种方法,我们可以快速打印出任意行数的杨辉三角

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值