c语言各类排序算法设计与实现

该博客详述了使用C语言实现多种排序算法的过程,包括冒泡、选择、插入、希尔、归并、快速、堆、计数、桶、基数排序,以及查找数组最大最小值和计算平均值、总和的功能。每种算法都提供了详细的设计和实现思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作品如当课设,请提前联系我获取权限,有问题概不负责,需要定制魏:QTWZPW

目录

1.概要设计

2.详细设计 

3. 排序算法实现

4.其他功能实现

 5.函数设计

 6.运行效果

 7.各类函数

冒泡排序算法实现

选择排序算法实现

插入排序算法实现

希尔排序算法实现

归并排序算法实现

快速排序算法实现

堆排序算法实现

计数排序算法实现

桶排序算法实现

基数排序算法实现

查找最大最小值

计算平均值和总和

8.完整代码



1.概要设计

本项目旨在实现常见的排序算法,并提供用户友好的交互界面,使用户能够选择不同的排序算法对输入的数组进行排序。除了排序功能外,还包括查找数组的最大最小值以及计算数组的平均值和总和的功能。

2.详细设计 

主程序流程
主程序通过一个循环,不断显示菜单,并等待用户选择排序算法或其他功能。
用户选择排序算法后,程序会提示输入数组,接收用户输入,并动态分配内存空间来存储数组。
根据用户选择的排序算法,调用相应的排序函数进行排序。
排序完成后,输出排序后的数组,并释放动态分配的内存空间。
程序询问用户是否需要重新排序,若用户选择是,则回到菜单显示步骤;若用户选择否,则程序结束。

3. 排序算法实现

 冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序等排序算法均有相应的实现函数。
每个排序函数接收一个整数数组和数组大小作为参数,对数组进行相应的排序操作。
在实现中,采用了常见的排序算法思想和算法逻辑,如冒泡排序的两层循环、快速排序的分区与递归、计数排序的计数与重排等。


4.其他功能实现


查找最大最小值:遍历数组,找到数组中的最大值和最小值,并输出。
计算平均值和总和:遍历数组,累加数组元素得到总和,然后除以数组大小得到平均值,并输出。

 5.函数设计

本项目涉及多个函数,包括主函数 main()、各种排序算法函数、其他功能函数以及显示菜单函数。以下是对每个函数的详细设计。

主函数 main()
int main()
功能:程序入口,包含主程序流程和用户交互逻辑。
参数:无。
返回值:整数,表示程序执行结果。
设计思路:
初始化变量,包括选择、数组和数组大小等。
进入主程序循环,显示菜单,等待用户选择排序算法或其他功能。
根据用户选择执行相应的操作,如排序、查找最大最小值或计算平均值总和。
循环直到用户选择退出程序。
排序算法函数(例如 bubbleSort()、selectionSort() 等)
void bubbleSort(int arr[], int n)
功能:实现冒泡排序算法,对传入的数组进行排序。
参数:
arr:整数数组,待排序的数组。
n:整数,数组的大小。
返回值:无。
设计思路:
使用两层循环遍历数组,每次将相邻元素进行比较,若逆序则交换。
外层循环控制遍历次数,内层循环执行比较和交换操作。
其他功能函数(例如 findMinMax()、calculateAverageSum() 等)
void findMinMax(int arr[], int n)
功能:查找数组中的最大值和最小值。
参数:
arr:整数数组,待查找的数组。
n:整数,数组的大小。
返回值:无。
设计思路:
初始化最大值和最小值为数组第一个元素。
遍历数组,更新最大值和最小值。
输出最大值和最小值。
显示菜单函数 displayMenu()
void displayMenu()
功能:在主程序中调用,用于显示用户可选的排序算法以及其他功能。
参数:无。
返回值:无。
设计思路:
使用 printf 函数输出菜单选项,包括排序算法和其他功能选项。
格式化输出,使得菜单界面清晰易读。

 6.运行效果

 7.各类函数

冒泡排序算法实现


void bubbleSort(int arr[], int n) {
    for (int i = 0; i < n - 1; i++) {
        for (int j = 0; j < n - i - 1; j++) {
            if (arr[j] > arr[j + 1]) {
                // 交换元素
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}

选择排序算法实现

void selectionSort(int arr[], int n) {
    for (int i = 0; i < n - 1; i++) {
        int minIndex = i;
        for (int j = i + 1; j < n; j++) {
            if (arr[j] < arr[minIndex]) {
                minIndex = j;
            }
        }
        // 交换元素
        int temp = arr[i];
        arr[i] = arr[minIndex];
        arr[minIndex] = temp;
    }
}

插入排序算法实现

void insertionSort(int arr[], int n) {
    for (int i = 1; i < n; i++) {
        int key = arr[i];
        int j = i - 1;
        while (j >= 0 && arr[j] > key) {
            arr[j + 1] = arr[j];
            j--;
        }
        arr[j + 1] = key;
    }
}

希尔排序算法实现

void shellSort(int arr[], int n) {
    for (int gap = n / 2; gap > 0; gap /= 2) {
        for (int i = gap; i < n; i++) {
            int temp = arr[i];
            int j;
            for (j = i; j >= gap && arr[j - gap] > temp; j -= gap) {
                arr[j] = arr[j - gap];
            }
            arr[j] = temp;
        }
    }
}

归并排序算法实现

void merge(int arr[], int left, int mid, int right) {
    int i, j, k;
    int n1 = mid - left + 1;
    int n2 = right - mid;

    int L[n1], R[n2];

    for (i = 0; i < n1; i++)
        L[i] = arr[left + i];
    for (j = 0; j < n2; j++)
        R[j] = arr[mid + 1 + j];

    i = 0;
    j = 0;
    k = left;
    while (i < n1 &&am
算法设计分析》目录: 第一篇引入篇 第1章算法概述1.1用计算机求解问题算法 1.1.1用计算机求解问题的步骤 1.1.2算法及其要素和特性 1.1.3算法设计及基本方法 1.1.4从算法实现 1.2算法描述 1.2.1算法描述简介 1.2.2算法描述约定 1.2.3一个简单问题的求解过程 1.3现代常用算法概览* 1.3.1压缩算法 1.3.2加密算法 1.3.3人工智能算法 1.3.4并行算法 1.3.5其他实用算法 第2章算法分析基础 2.1算法分析体系及计量 2.1.1算法分析的评价体系 2.1.2算法的时间复杂性 2.1.3算法的空间复杂性 2.1.4NP完全性问题 2.2算法分析实例 2.2.1非递归算法分析 2.2.2递归算法分析 2.2.3提高算法质量 第二篇基础篇 第3章算法基本工具和优化技巧3.1循环递归 3.1.1循环设计要点 3.1.2递归设计要点 3.1.3循环递归的比较 3.2算法数据结构 3.2.1原始信息处理结果的对应存储 3.2.2数组使信息有序化 3.2.3数组记录状态信息 3.2.4大整数存储及运算 3.2.5构造趣味矩阵 3.3优化算法的基本技巧 3.3.1算术运算的妙用 3.3.2标志量的妙用 3.3.3信息数字化 3.4优化算法的数学模型 3.4.1杨辉三角形的应用 3.4.2最大公约数的应用 3.4.3公倍数的应用 3.4.4斐波那契数列的应用 3.4.5递推关系求解方程 习题 第三篇核心篇 第4章基本的算法策略4.1迭代算法 4.1.1递推法 4.1.2倒推法 4.1.3迭代法解方程 4.2蛮力法 4.2.1枚举法 4.2.2其他范例 4.3分治算法 4.3.1分治算法框架 4.3.2二分法 4.3.3二分法变异 4.3.4其他分治方法 4.4贪婪算法 4.4.1可绝对贪婪问题 4.4.2相对或近似贪婪问题 4.4.3贪婪策略算法设计框架 4.5动态规划 4.5.1认识动态规划 4.5.2动态规划算法设计框架 4.5.3突出阶段性的动态规划应用 4.5.4突出递推的动态规划应用 4.6算法策略间的比较 4.6.1不同算法策略特点小结 4.6.2算法策略间的关联 4.6.3算法策略侧重的问题类型 习题 第5章图的搜索算法 5.1图搜索概述 5.1.1图及其术语 5.1.2图搜索及其术语 5.2广度优先搜索 5.2.1算法框架 5.2.2广度优先搜索的应用 5.3深度优先搜索 5.3.1算法框架 5.3.2深度优先搜索的应用 5.4回溯法 5.4.1认识回溯法 5.4.2回溯法算法框架 5.4.3应用1——基本的回溯搜索 5.4.4应用2——排列及排列树的回溯搜索 5.4.5应用3——最优化问题的回溯搜索 5.5分支限界法 5.5.1分支搜索算法 5.5.2分支限界搜索算法 5.5.3算法框架 5.6 图的搜索算法小结 习题 第四篇应用篇 第6章算法设计实践6.1循环赛日程表 6.2求3个数的最小公倍数 6.3猴子选大王 6.4最大子段和问题 6.5背包问题 6.5.1利润无关的背包问题 6.5.2利润有关的背包问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值