【C语言】常见的数据排序算法

目录

一、概述

二、常见的排序算法

2.1 冒泡排序

2.1.1 定义

2.1.2 C语言实现

2.2 快速排序

2.2.1 定义

2.2.2 C语言实现

2.3 插入排序

2.3.1 定义

2.3.2 C语言实现

2.4 希尔排序

2.4.1 定义

2.4.2 C语言实现

2.5 归并排序

2.5.1 定义

2.5.2 C语言实现

2.6 基数排序

2.6.1 定义

2.6.2 C语言实现

三、排序算法的空间、时间复杂度、稳定性


一、概述

        排序算法是《数据结构与算法》中最基本的算法之一。排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。

二、常见的排序算法

2.1 冒泡排序

2.1.1 定义

       冒泡排序是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。重复进行直到没有再需要交换的元素,这意味着数列已经排序完成。

2.1.2 C语言实现

        这段代码首先定义了一个冒泡排序函数bubble_sort,它接受一个整型数组和数组的长度作为参数。然后定义了两个辅助函数print_array用于打印数组和main函数作为程序的入口。在main函数中,我们首先打印原始数组,然后调用冒泡排序函数进行排序,并再次打印排序后的数组。

#include <stdio.h>void bubble_sort(int arr[], int len) {int i, j, temp;for (i = 0; i < len - 1; i++)for (j = 0; j < len - 1 - i; j++)if (arr[j] > arr[j + 1]) {temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}
}void print_array(int arr[], int len) {int i;for (i = 0; i < len; i++)printf("%d ", arr[i]);printf("\n");
}int main() {int arr[] = {64, 34, 25, 12, 22, 11, 90};int len = (int) sizeof(arr) / sizeof(*arr);printf("Original array: ");print_array(arr, len);bubble_sort(arr, len);printf("Sorted array: ");print_array(arr, len);return 0;
}

2.2 快速排序

2.2.1 定义

        快速排序作为多种排序方法中效率最高的一种,其底层原理被广泛运用,他的核心思想与二叉树结构中的递归逻辑相似,首先标记一个元素作为基准点,然后利用该基准点把数组分成左右两个区间,并且使小于该基准点的元素放在左区间,大于该基准点的元素放在右区间,如此反复递归,直到数组为一个有序数组。

2.2.2 C语言实现

        这段代码首先定义了一个辅助函数swap用于交换数组中的元素。然后定义了partition函数来选择一个基准点并重新排列数组,使得比基准点小的元素都在它的左侧,比基准点大的元素都在它的右侧。最后,quickSort函数递归地对数组的左右部分进行排序。printArray函数用于打印排序后的数组。在main函数中,我们定义了一个数组并对它进行排序,然后打印排序结果。

#include <stdio.h>void swap(int* a, int* b) {int t = *a;*a = *b;*b = t;
}int partition (int arr[], int low, int high) {int pivot = arr[high];int i = (low - 1);for (int j = low; j <= high - 1; j++) {if (arr[j] < pivot) {i++;swap(&arr[i], &arr[j]);}}swap(&arr[i + 1], &arr[high]);return (i + 1);
}void quickSort(int arr[], int low, int high) {if (low < high) {int pi = partition(arr, low, high);quickSort(arr, low, pi

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/39230.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【@AutoWired和@Resource的区别】

AutoWired和Resource的区别 这两个我们在项目中&#xff0c;经常去使用。很少有人知道他们有什么区别。下面我们将从 来源依赖查找顺序支持的参数依赖注入的用法支持 这四个方面来说明他们俩个的区别 来源 Autowired: 这是Spring框架自带的注解&#xff0c;用于实现自动依…

绝区零 Mac 下载安装详细教程(MacOS IPA 砸壳包 playCover 完美运行)

绝区零 7.4 号开始公测&#xff0c;但刚刚就可以开始下载了&#xff0c;我也是第一时间就迫不及待的安装到了我的 Mac 电脑上&#xff0c;感兴趣的朋友可以跟我一起安装试试 我这里是通过 playCover 的形式在 Mac 上安装运行的&#xff0c;根据之前原神的经验所以这次还是同样…

惠海 H6912 升压恒流芯片IC 支持2.6-40V升12V24V36V48V60V100V 10A 摄影灯 太阳能灯 UV灯 杀菌灯

1.产品描述 H6912是一款外围电路简洁的宽调光比升压调光LED恒流驱动器&#xff0c;可适用于2.6-40V输入 电压范围的LED恒流照明领域。H6912可以实现高精度的恒流效果&#xff0c;输出电流恒流精度≤士3%&#xff0c;电压工作范围为2.6-40V.可以轻松满足锂电池及中低压的应用需…

Python中的爬虫实战:猫眼电影爬虫

随着互联网技术的快速发展&#xff0c;网络上的信息量越来越庞大。猫眼电影作为国内领先的电影数据平台&#xff0c;为用户提供了全面的电影信息服务。本文将介绍如何利用python编写简单的猫眼电影爬虫&#xff0c;获取电影相关数据。 爬虫概述 爬虫&#xff0c;即网络爬虫&a…

x264 编码器 common.h 文件中结构体详细介绍

x264_slice_header_t 定义:typedef struct {x264_sps_t *sps;x264_pps_t *pps;int i_type;int i_first_mb;int i_last_mb;int i_pps_id;int i_frame_num

嵌入式Linux系统编程 — 6.1 信号的基本概念

目录 1 信号的概念和作用 1.1 什么是信号 1.2 信号的目的 1.3 信号如何处理 2 信号的分类 2.1 可靠信号与不可靠信号 2.2 实时信号与非实时信号 3 常见信号与默认行为 3.1 信号本质上是 int 类型数字编号 3.2 常见信号 1 信号的概念和作用 1.1 什么是信号 信号是一…

艾体宝干货 | 解析Redis企业版的多租户技术

在多租户架构中&#xff0c;一个软件实例为多个不同的用户组&#xff08;或“租户”&#xff09;提供服务。每个租户的数据都被安全地隔离&#xff0c;确保它们对其他租户不可见且无法访问。可以将其想象为一栋公寓大楼&#xff0c;每个人都住在共享建筑中独立且隔离的单元中。…

Java 商城后台管理系统

### 构建一个健壮的商城后台管理系统 使用Java Spring Boot框架和MySQL数据库&#xff0c;逐步构建一个健壮、安全、高效的商城后台管理系统。本文涵盖用户管理、商品管理、订单管理、分类管理、权限控制、日志记录、分页和排序、文件上传、缓存以及国际化。 --- #### 项目初…

大模型时代的基础架构,大模型算力中心建设指南重磅来袭!

什么是最畅销商品&#xff1f;什么是高毛利商品&#xff1f; 我们来看一个例子&#xff1a; 一件T恤使用成本为100元的原料&#xff0c;价格为140元。另一件T恤使用成本为80元的原料&#xff0c;但在样式、颜色、图案的设计上比较有特色&#xff0c;价格也为140元。 当这两件…

【JVM-04】线上CPU100%

【JVM-04】线上CPU100% 1. 如何排查2. 再举一个例子 1. 如何排查 ⼀般CPU100%疯狂GC&#xff0c;都是死循环的锅&#xff0c;那怎么排查呢&#xff1f;先进服务器&#xff0c;⽤top -c 命令找出当前进程的运⾏列表按⼀下 P 可以按照CPU使⽤率进⾏排序显示Java进程 PID 为 2609…

苏东坡传-读书笔记七

苏堤和西湖之与杭州&#xff0c;正如美女花容月貌上的双眸。我常想&#xff0c;倘若西湖之是空空的一片水——没有苏堤那秀美的修眉和虹彩般的仙岛&#xff0c;一画龙点睛增其神韵&#xff0c;那西湖该望之如何?几百年来的中国游客&#xff0c;春季到来之时&#xff0c;向西湖…

throw和catch关键字的作用。

在C中&#xff0c;throw和catch是异常处理机制的关键字&#xff0c;它们共同工作以处理在程序执行过程中发生的异常情况。 throw 关键字 throw关键字用于抛出一个异常。当程序遇到无法处理的错误时&#xff0c;它会使用throw语句抛出一个异常。这通常是因为遇到了某些无法恢复…

使用Vue 2 + Element UI搭建后台管理系统框架实战教程

后台管理系统作为企业内部的核心业务平台&#xff0c;其界面的易用性和功能性至关重要。Vue 2作为一个成熟的前端框架&#xff0c;以其轻量级和高效著称&#xff0c;而Element UI则是一套专为桌面端设计的Vue 2组件库&#xff0c;它提供了丰富的UI元素和组件&#xff0c;大大简…

如何在Python中实现一个简单的爬虫程序

如何在Python中实现一个简单的爬虫程序 随着互联网的发展&#xff0c;数据已成为当今社会最宝贵的资源之一。而爬虫程序则成为了获取互联网数据的重要工具之一。本文将介绍如何在Python中实现一个简单的爬虫程序&#xff0c;并提供具体的代码示例。 确定目标网站 在开始编写爬…

【Python】已解决:urllib.error.HTTPError: HTTP Error 403: Forbidden

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决&#xff1a;urllib.error.HTTPError: HTTP Error 403: Forbidden 一、分析问题背景 在使用Python的urllib库中的urlopen或urlretrieve函数下载文件时&#xff0c;有时会遇到…

Android动画:提升用户体验的关键技术

Android平台上的动画技术不仅仅是界面美化的手段&#xff0c;它更是提升用户体验、增强交互性和吸引用户注意力的重要工具。从简单的过渡动画到复杂的视图动态效果&#xff0c;Android开发者可以利用丰富的动画API创造出令人印象深刻的应用程序。本文将深入探讨Android动画的多…

Python打字练习

代码解析 导入模块和定义单词列表 import tkinter as tk import randomsample_words ["apple", "banana", "cherry", "date", "fig", "grape", "kiwi", "lemon", "mango", &quo…

LDA主题分析的原理、步骤和实现

当然可以&#xff01;LDA 主题模型是一种强大的工具&#xff0c;用于从大量文本数据中发现隐藏的主题。让我们更详细地介绍它的原理、步骤和实现。 LDA原理 LDA是一种生成模型&#xff0c;它假设&#xff1a; 每个文档是由若干主题组成的。每个主题是由若干词汇组成的。 具…

vcpkg国内镜像源替换

vcpkg国内镜像源替换 一、从Gitee上下载vcpkg二、全局替换vcpkg/scripts文件下的字符三、回到vcpkg目录下&#xff0c;执行bootstrap-vcpkg.bat文件&#xff0c;等待执行完毕四、全局替换vcpkg/ports文件下的字符 一、从Gitee上下载vcpkg git clone https://gitee.com/mirrors…

全国30省份各省资本存量数据固定资本形成总额永续盘存法(2000-2023年)

各省资本存量数据通过永续盘存法进行了详细的计算&#xff0c;这一方法覆盖了中国30个省份&#xff08;不包括西藏&#xff09;&#xff0c;提供从2000年起直至2023的资本存量数据集。包括原始数据、测算过程、最终的资本存量结果。 以2000年作为基期年份&#xff0c;依据…