C语言排序算法实现:冒泡、选择与快速排序
版权申诉
83 浏览量
更新于2024-09-05
收藏 16KB PDF 举报
该资源提供了三个C语言实现的排序算法:冒泡排序、选择排序和快速排序。每个排序算法都有详细的代码示例,并在主函数中进行测试。
冒泡排序算法
冒泡排序是一种简单的排序算法,通过不断交换相邻两个元素的位置来达到排序的目的。在提供的代码中,冒泡排序的实现包括两个嵌套循环,外层循环控制遍历的轮数,内层循环用于相邻元素的比较和交换。当数组中最大值逐渐“冒”到数组末尾时,排序完成。
```c
void sort(int array[], int size) {
int i, j, temp;
for (i = 0; i < size - 1; i++) { // 遍历数组
for (j = 0; j < size - 1 - i; j++) { // 每轮比较的次数逐轮减少
if (array[j] > array[j + 1]) {
temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
}
```
选择排序算法
选择排序的原理是找到未排序部分的最小值,然后将其与未排序部分的第一个元素交换。在提供的代码中,选择排序通过一个内部循环寻找最小值,然后将其与第一个未排序的元素交换。
```c
void sort(int array[], int size) {
int i, j, k, temp;
for (i = 0; i < size - 1; i++) {
k = i;
for (j = i + 1; j < size; j++) {
if (array[k] > array[j]) {
k = j;
}
}
temp = array[k];
array[k] = array[i];
array[i] = temp;
}
}
```
快速排序算法
快速排序是一种高效的排序算法,基于分治思想。选取一个基准值,将数组分为两部分,一部分所有元素小于基准,另一部分所有元素大于基准。然后对这两部分递归地进行快速排序。
```c
void quick_sort(int array[], int first, int last) {
if (first < last) {
int temp, low, high, list_separator;
low = first;
high = last;
list_separator = array[(first + last) / 2]; // 中间数
do {
while (array[low] < list_separator) {
low++;
}
while (array[high] > list_separator) {
high--;
}
if (low <= high) {
temp = array[low];
array[low] = array[high];
array[high] = temp;
low++;
high--;
}
} while (low <= high);
quick_sort(array, first, high);
quick_sort(array, low, last);
}
}
```
这三个排序算法各有特点:冒泡排序易于理解但效率较低,适用于小规模数据;选择排序的时间复杂度与冒泡排序相同,但在某些情况下可能更快;快速排序在平均情况下具有较高的效率,但最坏情况下的时间复杂度较高。在实际应用中,通常会根据数据规模和特定需求选择合适的排序算法。
2021-03-22 上传
2021-09-19 上传
2021-10-01 上传
2023-09-25 上传
2021-11-07 上传
2021-10-01 上传
2021-10-01 上传
2021-10-12 上传
2021-10-14 上传
nibuchunzhai
- 粉丝: 0
- 资源: 948
最新资源
- 深入浅出:自定义 Grunt 任务的实践指南
- 网络物理突变工具的多点路径规划实现与分析
- multifeed: 实现多作者间的超核心共享与同步技术
- C++商品交易系统实习项目详细要求
- macOS系统Python模块whl包安装教程
- 掌握fullstackJS:构建React框架与快速开发应用
- React-Purify: 实现React组件纯净方法的工具介绍
- deck.js:构建现代HTML演示的JavaScript库
- nunn:现代C++17实现的机器学习库开源项目
- Python安装包 Acquisition-4.12-cp35-cp35m-win_amd64.whl.zip 使用说明
- Amaranthus-tuberculatus基因组分析脚本集
- Ubuntu 12.04下Realtek RTL8821AE驱动的向后移植指南
- 掌握Jest环境下的最新jsdom功能
- CAGI Toolkit:开源Asterisk PBX的AGI应用开发
- MyDropDemo: 体验QGraphicsView的拖放功能
- 远程FPGA平台上的Quartus II17.1 LCD色块闪烁现象解析