C语言探索:选择、冒泡与快速排序代码详解及比较
155 浏览量
更新于2024-08-29
收藏 180KB PDF 举报
本资源提供了一个C语言代码示例,详细讲解了三种基本的排序算法:冒泡排序、选择排序和快速排序。首先,我们来看冒泡排序。冒泡排序通过两层嵌套循环,外层控制遍历次数,内层比较相邻元素并交换位置,使得每次遍历都将未排序部分的最大元素“冒”到序列末尾。关键代码如下:
```c
void maopao(int a[], int len){
int i, j, temp;
for (i = 0; i < len - 1; i++) { // 从第一个到倒数第二个
for (j = 0; j < len - 1 - i; j++) { // 排在后的是已排序的
if (a[j] > a[j + 1]) { // 大的数换到后面去
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
}
```
选择排序则是通过遍历未排序部分,找到最小(或最大)的元素并将其放置在正确的位置。它使用两个变量`t`和`temp`来跟踪当前未排序部分的最小值索引:
```c
void xuanze(int a[], int len){
int i, j, t, temp;
for (i = 0; i < len - 1; i++) {
t = i;
for (j = i + 1; j < len; j++) { // 前面已排好的
if (a[t] > a[j]) {
t = j; // 记下该趟最小数的序号
}
}
if (t != i) { // 如果序号改变
temp = a[t]; // 元素交换
a[t] = a[i];
a[i] = temp;
}
}
}
```
最后,快速排序是一种高效的排序算法,它采用分治策略,通过选择一个基准值(通常是第一个或最后一个元素),将数组分为两部分,一部分的所有元素都小于基准,另一部分都大于基准,然后递归地对这两部分进行排序。快速排序的关键在于`qSort`函数:
```c
void qSort(int a[], int low, int high){
int temp;
int mid = low; // 定义中值索引
int right = high; // 右边界
while (right > mid) { // 从右向左扫描
if (a[right] < a[mid]) { // 比较并交换
temp = a[mid];
a[mid] = a[right];
a[right] = temp;
}
// 移动基准到正确位置
while (a[mid] < a[right]) {
mid++;
}
// 将小于基准的元素交换到左边
if (mid < right) {
temp = a[mid];
a[mid] = a[right];
a[right] = temp;
}
}
}
```
在`main`函数中,作者提供了数组`inta[]`的示例,并调用了`xuanze`函数进行选择排序。这三种排序算法各有优缺点,冒泡排序简单但效率较低,选择排序和快速排序虽然复杂度相对较好,但快速排序的平均性能优于选择排序。通过这些代码示例,读者可以理解并掌握C语言实现不同排序算法的基本步骤。
2017-06-21 上传
2010-11-21 上传
2020-09-02 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
weixin_38569203
- 粉丝: 6
- 资源: 930
最新资源
- C语言数组操作:高度检查器编程实践
- 基于Swift开发的嘉定单车LBS iOS应用项目解析
- 钗头凤声乐表演的二度创作分析报告
- 分布式数据库特训营全套教程资料
- JavaScript开发者Robert Bindar的博客平台
- MATLAB投影寻踪代码教程及文件解压缩指南
- HTML5拖放实现的RPSLS游戏教程
- HT://Dig引擎接口,Ampoliros开源模块应用
- 全面探测服务器性能与PHP环境的iprober PHP探针v0.024
- 新版提醒应用v2:基于MongoDB的数据存储
- 《我的世界》东方大陆1.12.2材质包深度体验
- Hypercore Promisifier: JavaScript中的回调转换为Promise包装器
- 探索开源项目Artifice:Slyme脚本与技巧游戏
- Matlab机器人学习代码解析与笔记分享
- 查尔默斯大学计算物理作业HP2解析
- GitHub问题管理新工具:GIRA-crx插件介绍