2. 分别用选择排序和冒泡排序算法编写程序完成n(n由键盘输入)个不同随机数的降序排列,并分行输出原始数据和排序数据。(语言-python)

.分别用选择排序和冒泡排序算法编写程序完成n(n由键盘输入)个不同随机数的降序排列,并分行输出原始数据和排序数据。

以下是一些思路,可供参考:

选择排序算法实现:

import random

def selection_sort(arr):
    n = len(arr)
    for i in range(n):
        max_index = i
        for j in range(i+1, n):
            if arr[j] > arr[max_index]:
                max_index = j
        arr[i], arr[max_index] = arr[max_index], arr[i]

n = int(input("请输入随机数的个数:"))
arr = [random.randint(1, 100) for i in range(n)]
print("原始数据:")
print(arr)

selection_sort(arr)
print("排序数据:")
for num in arr:
    print(num)
冒泡排序算法实现:

import random

def bubble_sort(arr):
    n = len(arr)
    for i in range(n):
        for j in range(n-i-1):
            if arr[j+1] > arr[j]:
                arr[j], arr[j+1] = arr[j+1], arr[j]

n = int(input("请输入随机数的个数:"))
arr = [random.randint(1, 100) for i in range(n)]
print("原始数据:")
print(arr)

bubble_sort(arr)
print("排序数据:")
for num in arr:
    print(num)

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7614144
  • 这篇博客你也可以参考下:python将输入的n个数进行大小排序:小到大和大到小
  • 除此之外, 这篇博客: <LeetCode天梯>Day025 删除链表的倒数第N个节点(双指针) | 初级算法 | Python中的 双指针法 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 分析:

    根据题干的要求,我们需要删除倒数第n个节点,在返回头结点。只需要找到倒数第n个节点,将其删除,再返回。
    说真的不难,直接用双指针,来!

    借用一下大佬的草图
    在这里插入图片描述

    # Definition for singly-linked list.
    # class ListNode:
    #     def __init__(self, val=0, next=None):
    #         self.val = val
    #         self.next = next
    class Solution:
        def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:
            # 定义哑终端,用于前项循环
            dummy = ListNode(0)
            dummy.next = head
    
            # 设置两个指针
            fast = head
            slow = dummy
            # 移动fast到n步
            for i in range(n):
                fast = fast.next
           
            # 快慢节点同时走,循环到fast的末尾
            while fast:
                fast = fast.next
                slow = slow.next
    
            slow.next = slow.next.next
            return dummy.next
    

    卷啊卷,一直卷!~
    在这里插入图片描述
    最近在改论文,就先到这里吧!~

    关于链表,自我感觉学的不是很好,后期空了出一些关于链表的小技能树吧,flag先立在这里!!!

    建议坚持,慢慢来比较快!

  • 您还可以看一下 李刚老师的21天通关Python(仅视频课)课程中的 案例实操:定义计算N的阶乘的函数小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    问题解决方案:

    1. 选择排序的实现代码:

    def selectSort(nums): n = len(nums) for i in range(n): minIndex = i for j in range(i+1, n): if nums[j] < nums[minIndex]: minIndex = j nums[i], nums[minIndex] = nums[minIndex], nums[i] return nums

    if name == 'main': n = int(input("输入随机数的个数:")) nums = [] for i in range(n): nums.append(int(input())) print("原始数据:") for num in nums: print(num) nums = selectSort(nums) print("排序后的数据:") for num in nums: print(num)

    1. 冒泡排序的实现代码:

    def bubbleSort(nums): n = len(nums) for i in range(n-1): for j in range(n-i-1): if nums[j] < nums[j+1]: nums[j], nums[j+1] = nums[j+1], nums[j] return nums

    if name == 'main': n = int(input("输入随机数的个数:")) nums = [] for i in range(n): nums.append(int(input())) print("原始数据:") for num in nums: print(num) nums = bubbleSort(nums) print("排序后的数据:") for num in nums: print(num)

    1. 组合算法的实现代码:

    def combinations(nums, n): res = [] def dfs(start, path, n): if n == 0: res.append(path[:]) return for i in range(start, len(nums)): path.append(nums[i]) dfs(i+1, path, n-1) path.pop()

    dfs(0, [], n)
    return res
    

    if name == 'main': nums = [1,2,3,4,5] n = 3 res = combinations(nums, n) print(res)

    1. N叉树的前序遍历代码:

    class Solution: def preorder(self, root: 'Node') -> List[int]: if not root: return [] res = [root.val] for child in root.children: res += self.preorder(child) return res