常用的内部排序算法

2024-07-16 1794阅读

常用的内部排序算法

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

常用的内部排序算法
(图片来源网络,侵删)

运行结果:

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] = 0 and key  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  pivot:
                right -= 1
                self.comparisons += 1
            if left >= right:
                return right
            items[left], items[right] = items[right], items[left]
            self.moves += 1
    def heap_sort(self, arr):
        self.reset_counters()
        n = len(arr)
        def heapify(arr, n, i):
            largest = i
            l = 2 * i + 1
            r = 2 * i + 2
            if l  

C语言代码

#include 
#include 
int comparisons = 0;
int moves = 0;
void reset_counters() {
    comparisons = 0;
    moves = 0;
}
void print_array(int arr[], int size) {
    for (int i = 0; i  arr[j + 1]) {
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
                moves++;
                print_array(arr, size);
            }
        }
    }
}
void selection_sort(int arr[], int size) {
    reset_counters();
    for (int i = 0; i = 0 && arr[j] > key) {
            comparisons++;
            arr[j + 1] = arr[j];
            moves++;
            j--;
            print_array(arr, size);
        }
        arr[j + 1] = key;
        moves++;
        print_array(arr, size);
    }
}
void shell_sort(int arr[], int size) {
    reset_counters();
    for (int gap = size / 2; gap > 0; gap /= 2) {
        for (int i = gap; i = gap && arr[j - gap] > temp; j -= gap) {
                comparisons++;
                arr[j] = arr[j - gap];
                moves++;
                print_array(arr, size);
            }
            arr[j] = temp;
            moves++;
            print_array(arr, size);
        }
    }
}
void quick_sort(int arr[], int left, int right) {
    if (left = pivot) {
                comparisons++;
                j--;
            }
            if (i  arr[largest]) {
        comparisons++;
        largest = r;
    }
    if (largest != i) {
        int temp = arr[i];
        arr[i] = arr[largest];
        arr[largest] = temp;
        moves++;
        print_array(arr, size);
        heapify(arr, size, largest);
    }
}
void heap_sort(int arr[], int size) {
    reset_counters();
    for (int i = size / 2 - 1; i >= 0; i--) {
        heapify(arr, size, i);
    }
    for (int i = size - 1; i > 0; i--) {
        int temp = arr[0];
        arr[0] = arr[i];
        arr[i] = temp;
        moves++;
        print_array(arr, size);
        heapify(arr, i, 0);
    }
}
int main() {
    int choice, size;
    printf("请输入要排序的数组大小: ");
    scanf("%d", &size);
    int arr[size];
    printf("请输入数组元素 (用空格隔开): ");
    for (int i = 0; i 
                
                
                
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]