常用的内部排序算法

常用的内部排序算法

简单选择排序、直接插入排序和冒泡排序、折半插入排序、希尔排序算法、快速排序算法(递归和非递归)、堆排序

运行结果:

python

输入数据15,5,6,7,8,9,10
[外链图片转存中…(img-60STknHj-1720750359076)]
[外链图片转存中…(img-QWNWapS5-1720750359078)]
[外链图片转存中…(img-fVhvkUVx-1720750359079)]

C语言

输入数据8 6 80 50 40

[外链图片转存中…(img-yKdnpElL-1720750359079)]

[外链图片转存中…(img-MlEA4ULs-1720750359080)]
[外链图片转存中…(img-D81R9SPg-1720750359080)]

代码

Python代码

import tkinter as tk
from tkinter import ttk
class SortAlgorithms:
    def __init__(self):
        self.comparisons = 0
        self.moves = 0
    def reset_counters(self):
        self.comparisons = 0
        self.moves = 0
    def bubble_sort(self, arr):
        self.reset_counters()
        n = len(arr)
        for i in range(n):
            for j in range(0, n - i - 1):
                self.comparisons += 1
                if arr[j] > arr[j + 1]:
                    arr[j], arr[j + 1] = arr[j + 1], arr[j]
                    self.moves += 1
                    yield arr[:]
    def selection_sort(self, arr):
        self.reset_counters()
        n = len(arr)
        for i in range(n):
            min_idx = i
            for j in range(i + 1, n):
                self.comparisons += 1
                if arr[j] < arr[min_idx]:
                    min_idx = j
            arr[i], arr[min_idx] = arr[min_idx], arr[i]
            self.moves += 1
            yield arr[:]
    def insertion_sort(self, arr):
        self.reset_counters()
        for i in range(1, len(arr)):
            key = arr[i]
            j = i - 1
            while j >= 0 and key < arr[j]:
                self.comparisons += 1
                arr[j + 1] = arr[j]
                self.moves += 1
                j -= 1
                yield arr[:]
            arr[j + 1] = key
            self.moves += 1
            yield arr[:]
    def shell_sort(self, arr):
        self.reset_counters()
        n = len(arr)
        gap = n // 2
        while gap > 0:
            for i in range(gap, n):
                temp = arr[i]
                j = i
                while j >= gap and arr[j - gap] > temp:
                    self.comparisons += 1
                    arr[j] = arr[j - gap]
                    self.moves += 1
                    j -= gap
                    yield arr[:]
                arr[j] = temp
                self.moves += 1
                yield arr[:]
            gap //= 2
    def quick_sort(self, arr):
        self.reset_counters()
        def _quick_sort(items, low, high):
            if low < high:
                pivot_index = self.partition(items, low, high)
                yield from _quick_sort(items, low, pivot_index)
                yield from _quick_sort(items, pivot_index + 1, high)
        yield from _quick_sort(arr, 0, len(arr) - 1)
    def partition(self, items, low, high):
        pivot = items[(low + high) // 2]
        left = low
        right = high
        while True:
            while items
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鷇韩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值