目录

1.项目要求
2.定义模块函数
3.各模块函数实现
4.项目源代码

1. 项目要求

1.1 定义大小为 100 的整型数组,使用随机函数给数组元素赋值。

1.2 数组中的数值的范围为 0 - 100,数组中的元素不允许重复。

1.3 对数组中的元素使用冒泡排序进行排序。

2. 定义模块函数

2.1 主函数:main()

2.2 打印函数:Print_Ar()

2.3 初始化函数:Init_Ar()

2.4 冒泡排序函数:BubbleSort()

2.5 交换函数:Sweap_Int()

3. 各模块函数实现

3.1 打印函数:Print_Ar()

①. 循环打印数组中的各元素,一行 10 个元素。

②. 源程序

/** 打印函数 */
void Print_Ar(int* br, int n)
{assert(br != nullptr);for (int i = 0; i < n; ++i){printf("%4d ", br[i]);if ((i + 1) % 10 == 0)             // 一行打印 10 个元素{printf("\n");}}printf("\n");
}

3.2 初始化函数:Init_Ar()

①. 思想:随机生成 100 个数值,数值范围为 0 - 100,存放到数组中。因调用查询函数进行查询是否有重复值,该算法时间复杂度较高,效率较低,故采用查表法。生成的数值即为表 table 的下标,表 table 初始值均为 0,如果当前下标表中没有存放数据,则将该随机数存放到数组中,然后将表中的 0 变为 1,说明已经存放数据。

②. 源程序

/** 初始化 生成随机数 */
void Init_Ar(int* br, int n)
{assert(br != nullptr);/** 查表法 */int i = 0;int table[ARSIZE + 1] = {};              // 新建表 table 范围 0 ... 100 表中数据均为为 0while (i < n){int tmp = rand() % RANDSIZE + 1;  // 生成随机数 0 ... 100if (table[tmp] == 0)                // 如果当前下标表中没有存放数据  tmp 为 table 的下标{br[i] = tmp;                    // 则将该随机数存放到数组中++i;table[tmp] = 1;                   // 将表中的 0 变为 1 说明已经存放数据}}
}

3.3 冒泡排序函数:BubbleSort()

①. 算法思想:冒泡排序 n 个元素比较 n - 1 趟,该趟中比较 n - i 次。若前面一个元素大于后面一个元素,则这两个元素进行交换。提前设标记 tag,如果需要交换则改变标记,如果不需要交换(即标记 tag 未改变),则退出当前循环,进行下一趟的比较,直到排序完成。

②. 源程序

/** 冒泡排序 */
void BubbleSort(int* br, int n)
{assert(br != nullptr);                        // 断言机制 br 不为空 则继续执行下面代码 运行时检查 如果为假则不执行后面代码for (int i = 1; i < n; ++i)                    // n 个数比较 n - 1 趟 {bool tag = true;                        // 标记 tagfor (int j = 0; j < n - i; ++j)          // 该趟中比较 n - i 次{if (br[j] > br[j + 1])             // 若前面元素大于后面元素 则两两交换{Sweap_Int(&br[j], &br[j + 1]);    // 调用交换函数进行交换tag = false;                  // 交换则改变标记}}if (tag)                                // 如果不用交换(即标记 tag 未被改变)则退出当前循环{break;}}
}

3.4 交换函数:Sweap_Int()

①. 思想:交换函数进行交换,使用指针变量进行交换,调用交换函数时,改变指针所指向的值,可以实现交换。

②. 源程序

/** 交换函数 */
void Sweap_Int(int* ar, int* br)
{assert(ar != nullptr && br != nullptr);int tmp = *ar;*ar = *br;*br = tmp;
}

3.5 主函数:main()

/** 主函数 */
int main()
{const int n = 100;        // 常整型 只可读不可写 int ar[n] = {};          // 整型数组 ar 未初始化Init_Ar(ar, n);      // 调用初始化函数 生成随机数printf("排序前:\n");Print_Ar(ar, n);BubbleSort(ar, n);        // 调用排序函数 对生成的随机数进行排序printf("排序后:\n");Print_Ar(ar, n);     // 调用打印函数 进行输出打印return 0;
}

4. 项目源代码

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>/**
* 要求:
* 定义大小为 100 的整型数组
* 使用随机函数给数组元素赋值 数值范围为 0 - 100 不允许重复
* 并用冒泡排序进行排序
*/
#define RANDSIZE 100                        // 宏定义 随机数大小 100
#define ARSIZE 100                          // 宏定义 数组大小 100/** 交换函数 */
void Sweap_Int(int* ar, int* br)
{assert(ar != nullptr && br != nullptr);int tmp = *ar;*ar = *br;*br = tmp;
}/** 冒泡排序 */
void BubbleSort(int* br, int n)
{assert(br != nullptr);                        // 断言机制 br 不为空 则继续执行下面代码 运行时检查 如果为假则不执行后面代码for (int i = 1; i < n; ++i)                    // n 个数比较 n - 1 趟 {bool tag = true;                        // 标记 tagfor (int j = 0; j < n - i; ++j)          // 该趟中比较 n - i 次{if (br[j] > br[j + 1])             // 若前面元素大于后面元素 则两两交换{Sweap_Int(&br[j], &br[j + 1]);    // 调用交换函数进行交换tag = false;                  // 交换则改变标记}}if (tag)                                // 如果不用交换(即标记 tag 未被改变)则退出当前循环{break;}}}/** 查询函数 */
/**
int FindValue(int* br, int n, int val)
{assert(br != nullptr);int pos = -1;for (int i = 0; i < n; ++i){if (br[i] == val)                 // 找到查询的值{pos = i;                     // 当前下标break;}}return pos;                              // 找到返回当前下标 没找到返回 -1
}
*//** 初始化 生成随机数 */
void Init_Ar(int* br, int n)
{assert(br != nullptr);/** 代码改进 查表法 */int i = 0;int table[ARSIZE + 1] = {};             // 新建表 table 范围 0 ... 100 表中数据均为为 0while (i < n){int tmp = rand() % RANDSIZE + 1;  // 生成随机数 0 ... 100if (table[tmp] == 0)                // 如果当前下标表中没有存放数据  tmp 为 table 的下标{br[i] = tmp;                    // 则将该随机数存放到数组中++i;table[tmp] = 1;                   // 将表中的 0 变为 1 说明已经存放数据}}/** 时间复杂度较高 效率较低int i = 0;while (i < n){int tmp = rand() % RANDSIZE + 1;     // 生成随机数 1 ... 100//等价于 ==>  *(br + i) = rand() % RANDSIZE + 1;if (FindValue(br, n, tmp) == -1)       // 避免生成的随机数相同 没找到相同的值则将该值输入到数组里{br[i] = tmp;++i;}}*/
}/** 打印函数 */
void Print_Ar(int* br, int n)
{assert(br != nullptr);for (int i = 0; i < n; ++i){printf("%4d ", br[i]);if ((i + 1) % 10 == 0)             // 一行打印 10 个元素{printf("\n");}}printf("\n");
}/** 主函数 */
int main()
{const int n = 100;        // 常整型 只可读不可写 int ar[n] = {};          // 整型数组 ar 未初始化Init_Ar(ar, n);      // 调用初始化函数 生成随机数printf("排序前:\n");Print_Ar(ar, n);BubbleSort(ar, n);        // 调用排序函数 对生成的随机数进行排序printf("排序后:\n");Print_Ar(ar, n);     // 调用打印函数 进行输出打印return 0;
}

运行结果

【C 语言之项目实战】生成随机数并排序(详细版)相关推荐

  1. R语言使用random包生成随机数或者随机字符串实战:randomNumbers函数创建随机整数的数据集(包含重复项)、randomSequence函数创建不含重复项的随机序列数据集、创建随机字符串

    R语言使用random包生成随机数或者随机字符串实战:randomNumbers函数创建随机整数的数据集(包含重复项).randomSequence函数创建不含重复项的随机序列数据集.创建随机字符串 ...

  2. c语言期中项目实战二—简易扫雷,思路分析加代码详细注释

    c语言期中项目实战二-简易扫雷,思路分析+代码详细注释 游戏介绍 项目步骤 模块化编程 设置菜单 设置棋盘 打印棋盘 布置雷 排查雷 总结及总代码和详细注释 游戏介绍 扫雷这个经典游戏,直到现在仍有很 ...

  3. 新书推荐 |《OpenCV 4计算机视觉项目实战(原书第2版)》

    新书推荐 <OpenCV 4计算机视觉项目实战(原书第2版)> 长按二维码 了解及购买 一本使用OpenCV进行计算机视觉应用开发的实践,指南不仅介绍OpenCV基础知识,还详细讲解各种实 ...

  4. R语言:逆变换法生成随机数

    逆变换法生成随机数: 一.概念解释 1.PDF 2.PMF 3.CDF 二.连续型情况举例 三.离散型情况举例 一.概念解释 1.PDF probability density function 概率 ...

  5. 线性同余法产生随机数C语言,线性同余生成随机数的一点思考

    今天下午 pk 和我讨论了一个问题,他看到在另一个项目组的 lua 代码里有一段使用线性同余产生随机数的代码,但是那个项目组的同事告诉他这个函数生成的随机数是分布不均的.于是他想到了我前两天给他讲的关 ...

  6. python实战===生成随机数

    用于生成一个指定范围内的随机符点数,两个参数其中一个是上限,一个是下限. import random print random.uniform(10, 20) print random.uniform ...

  7. R语言学习笔记:生成随机数

    R语言中,可以根据不同的分布生成随机数 均匀分布 runif(par1) runif(par1, min = par2, max = par3) 我们需要输入3个参数: par1:生成随机数的个数 p ...

  8. ThinkPHP5多语言切换项目实战

    ThinkPHP5多语言切换实战 1.在配置文件中开启多语言配置 2.然后添加多语言目录 这里创建你需要的语言包 在语言包里定义需要翻译的文本,中英文数组的键名写成一致 然后在html文件里输入 {: ...

  9. 【C 语言之项目实战】判断闰年及计算天数(详细版)

    目录 1.项目要求 2.定义模块函数 3.各模块函数实现 4.项目源代码 5.项目总结 1. 项目要求 1.1 首先判断用户输入的年份是否为闰年: 1.2 计算一年中每个月份的天数: 1.3 用户输入 ...

最新文章

  1. RecyclerView悬浮标题
  2. boost::fusion::find_if用法的测试程序
  3. SAP S/4HANA Cloud 系统集成的一些场景介绍
  4. linux nacos启动_Nacos集群安装配置
  5. npm aes 加密(js aes 加密)
  6. nginx 启动命令_Nginx实战001:Window中配置使用Nginx入门
  7. 实体与表映射关系XXX.hbm.xml配置详解(转)
  8. 2021-08-04 模糊查询
  9. 说出来你可能不信,内核这家伙在内存的使用上给自己开了个小灶!
  10. 诺,你们要的Python进阶来咯!【函数、类进阶必备】
  11. 用HFFS实例讲解PCB蛇形天线设计技巧
  12. web test performance tools / linux performance tools / windows performance tools
  13. 手把手教你封装属于自己的Windows7安装镜像
  14. python_使用需要的气象台站提取气象数据
  15. java自下而上和自上而下_编程中自上而下和自下而上方法的区别
  16. mysql error1205 博客_MySQL的ERROR 1205错误分析
  17. 停车场反向寻车实现方法和算法
  18. Hystrix学习(2)雪崩效应
  19. STM32——OLED显示实验
  20. RTFNet——用于城市场景语义分割的RGB和热红外融合网络

热门文章

  1. [分布式控制] (4) 刚性图论基础和仿射编队
  2. oracle报错——字符集不匹配
  3. 看完这篇文章你还敢说不知道多线程是什么?
  4. 主键约束(PRIMARY KEY, PK)
  5. [转载]LFSR的工作原理以及LFSR在CRC上的应用
  6. matlab ts模糊工具箱,通过算例熟悉MATLAB模糊控制工具箱
  7. 【编程初学者】创建自己的开源项目1-创建远程代码仓库
  8. 工具系列——XMind 8 Update 7的破解步骤
  9. 字节面试官必问的Mysql锁机制
  10. 微服务开源生态报告 No.1