冒泡排序算法c语言代码_输入n个数进行冒泡排序C语言

C语言是过去几十年软件和硬件两个阵营之间,签署的最坚实的契约。硬件为C语言的语义提供了最能发挥其性能的基础构件,而软件虽然搞了很多的圆环套圆环般的层次,但最终都以C语言作为最后的沉淀收尾。—-后面也会有C版的迷你程序!!!

之所以起头写这样系列的文档,主要是锻炼自己的编码能力,类似于leetcode吧。

浅话到此,C版的迷你程序、Python版的迷你程序、以及两个语言好玩的小项目,都会持续不定时的网络收集和自己把玩。充实自己的小白脑细胞。另外新进语言Rust和go也会有所涉猎。

1 冒泡的调试

冒泡排序–Bubble Sort是一种简单的排序算法。内层循环重复地访问要排序的数列,一次比较两个元素,如果他们的顺序“错误”(看23行和27行,从大到小还是从小到大)就把他们交换过来。每一次的外层循环都会找到一个最值。截图中肉眼可见的数据移动策略。

#include <stdio.h> #include <time.h> #include <stdlib.h> #include <sys/time.h> void ShowSortPro(int arr, int len) { int i; for (i = 0; i < len; i++) printf("%6d ", arr); printf(" \n"); } // // 冒泡排序 // 输入参数:数组 // 数组的长度 // void BubbleSort(int arr, int len) { int i, j, temp; // > 小到大的排序 for (i = 0; i < len - 1; i++){ // 每一层结束找到最大值 printf("======================================================== %d\n", i); for (j = 0; j < len - 1 - i; j++){ if (arr > arr[j + 1]) { temp = arr; arr = arr[j + 1]; arr[j + 1] = temp; } ShowSortPro(arr, len); } printf("======================================================== %d\n", i); } } void main() { int arr = { 65, 75, 59, 26, 92, 19, 8, 67 }; int len; int i; // sizeof是运算符,不是函数 // sizeof能求得静态分配内存的数组的长度,即占用内存的大小,以byte为单位 len = (int) sizeof(arr) / sizeof(arr); //printf("%ld \n", sizeof(arr)); //printf("%ld \n", sizeof(arr)); ShowSortPro(arr, len); printf("===========================================================START=\n"); BubbleSort(arr, len); printf("============================================================END\n"); ShowSortPro(arr, len); }

冒泡排序算法c语言代码_输入n个数进行冒泡排序C语言

2 冒泡的耗时

这里只是测试编译器对代码进行自动优化编译和不优化的耗时比较,后续还会有其他排序算法的进行此类耗时比较,这个算法的耗时其实受到原始数据序列性的严重影响,所以代码把随机数的种子取消了,编译优化不优化处理同样的数据。感兴趣的可以试试其他级别的优化,这里要注意优化后程序的结果要正确耗时比较才有意义。

#include <stdio.h> #include <time.h> #include <stdlib.h> #include <sys/time.h> void ShowSortPro(int arr, int len) { int i; for (i=0; i<len; i++) printf("%6d ", arr); printf(" \n"); } // // 冒泡排序 // 输入参数:数组 // 数组的长度 // void BubbleSort(int arr, int len) { int i, j, temp; // > 小到大的排序 for (i=0; i<len-1; i++){ // 每一层结束找到最大值 //printf("======================================================== %d\n", i); for (j=0; j<len-1-i; j++){ if (arr > arr[j + 1]) { temp = arr; arr = arr[j + 1]; arr[j + 1] = temp; } //ShowSortPro(arr, len); } //printf("======================================================== %d\n", i); } } #define N 16*1024 int arrtime; int arrtimecopy; void main() { int len=15; int i; //srand((unsigned)time(NULL)); for (i = 0; i < N; i++) arrtime = rand()%32768; for (i = 0; i < N; i++) arrtimecopy = arrtime; struct timeval start_time, end_time; unsigned int spend_us = 0; ShowSortPro(arrtime, len); printf("============================================================START\n"); gettimeofday(&start_time, NULL); BubbleSort(arrtime, N); gettimeofday(&end_time, NULL); spend_us += end_time.tv_usec-start_time.tv_usec+1000000*(end_time.tv_sec-start_time.tv_sec); printf("============================================================END\n"); ShowSortPro(arrtime, len); printf("1 \t spend %ld us \n", (end_time.tv_usec-start_time.tv_usec+1000000*(end_time.tv_sec-start_time.tv_sec))); for (i=0; i<N; i++) arrtime = arrtimecopy; ShowSortPro(arrtime, len); printf("============================================================START\n"); gettimeofday(&start_time, NULL); BubbleSort(arrtime, N); gettimeofday(&end_time, NULL); spend_us += end_time.tv_usec-start_time.tv_usec+1000000*(end_time.tv_sec-start_time.tv_sec); printf("============================================================END\n"); ShowSortPro(arrtime, len); printf("2 \t spend %ld us \n", (end_time.tv_usec-start_time.tv_usec+1000000*(end_time.tv_sec-start_time.tv_sec))); for (i=0; i<N; i++) arrtime = arrtimecopy; ShowSortPro(arrtime, len); printf("============================================================START\n"); gettimeofday(&start_time, NULL); BubbleSort(arrtime, N); gettimeofday(&end_time, NULL); spend_us += end_time.tv_usec-start_time.tv_usec+1000000*(end_time.tv_sec-start_time.tv_sec); printf("============================================================END\n"); ShowSortPro(arrtime, len); printf("3 \t spend %ld us \n", (end_time.tv_usec-start_time.tv_usec+1000000*(end_time.tv_sec-start_time.tv_sec))); for (i=0; i<N; i++) arrtime = arrtimecopy; ShowSortPro(arrtime, len); printf("============================================================START\n"); gettimeofday(&start_time, NULL); BubbleSort(arrtime, N); gettimeofday(&end_time, NULL); spend_us += end_time.tv_usec-start_time.tv_usec+1000000*(end_time.tv_sec-start_time.tv_sec); printf("============================================================END\n"); ShowSortPro(arrtime, len); printf("4 \t spend %ld us \n", (end_time.tv_usec-start_time.tv_usec+1000000*(end_time.tv_sec-start_time.tv_sec))); for (i=0; i<N; i++) arrtime = arrtimecopy; ShowSortPro(arrtime, len); printf("============================================================START\n"); gettimeofday(&start_time, NULL); BubbleSort(arrtime, N); gettimeofday(&end_time, NULL); spend_us += end_time.tv_usec-start_time.tv_usec+1000000*(end_time.tv_sec-start_time.tv_sec); printf("============================================================END\n"); ShowSortPro(arrtime, len); printf("5 \t spend %ld us \n", (end_time.tv_usec-start_time.tv_usec+1000000*(end_time.tv_sec-start_time.tv_sec))); printf("T \t spend %f us \n", spend_us/5.0); }

冒泡排序算法c语言代码_输入n个数进行冒泡排序C语言

冒泡排序算法c语言代码_输入n个数进行冒泡排序C语言

本文【冒泡排序算法c语言代码_输入n个数进行冒泡排序C语言】由作者: 递归 提供,本站不拥有所有权,只提供储存服务,如有侵权,联系删除!
本文链接:https://www.cuoshuo.com/blog/4089.html

(0)
上一篇 2023-03-09 07:08:02
下一篇 2023-03-09 07:25:02

相关推荐

  • dos命令大全及详解pdf

    基本DOS 命令集详细解说 path 指向路径命令: path=c:\dos;c:\windows;c:\ 这条命令就是说,当我们执行一个文件时, 电脑先在当前目录下查找这个文件,找到则执行,如果没有找到,则电脑按照 path命令所指定的目录顺序去查找,先在C盘dos目录下,然后在windows目录 下,最后在C盘根目录下寻找这个文件 edit 编辑命令: …

    实用教程 2023-03-17
    000
  • vc60安装教程win10无法正常使用(win10点关机没反应)

    许多大学都有学习c语言的课程,一般这些学校上机用的是vc.60,但是自己在win10的系统上,vc6.0会显示无法正常启动 接下来给大家带来一个解决方法!这个方法是网上的答案,后面会给大家说一下小编自己电脑上的解决方法 下面是具体的操作步骤。 在 VC6.0 的快捷方式或开始菜单上单击鼠标右键,选择“属性”: 在弹出的对话框中,将兼容模式修改为Windows…

    2023-03-15
    000
  • 遗传算法原理及应用pdf_遗传算法与工程优化pdf

    遗传算法 ( GA , GeneticAlgorithm ) ,也称进化算法 。 遗传算法是受达尔文的进化论的启发,借鉴生物进化过程而提出的一种启发式搜索算法。因此在介绍遗传算法前有必要简单地介绍生物进化知识。 一.进化论知识 作为遗传算法生物背景的介绍,下面内容了解即可: 种群(Population):生物的进化以群体的形式进行,这样的一个群体称为种群。 …

    2023-03-18
    000
  • 社会工程学软件实训报告,实训报告怎么写

    社会工程学是利用人性弱点体察、获取有价值信息的实践方法,它是一种欺骗的艺术。在缺少目标系统的必要信息时,社会工程学技术是渗透测试人员获取信息的至关重要的手段。对所有类型的组织(单位)而言,人都是安全防范措施里最薄弱的一环,也是整个安全基础设施最脆弱的层面。人都是社会的产物,人的本性就是社会性,所以人都有社会学方面的弱点都易受社会工程学攻击。社会工程学的攻击人…

    2023-03-19
    000
  • sqlyog连接mysql数据库

    今天在用sqlyog连接MySql8.0时提示2508错误码,如下图所示: 之后用navicat连接mysql,连接正常 那么这说明数据库连接应该是好的,那么2个工具一个可以连接,一个不可以,原因是什么?这是因为MySQL 8.0 安装时自动为‘root’@'localhost’创建帐户,密码的加密方法发生了改变,因此 SQLyog 不能正常解析,…

    2023-03-08
    600
  • 学生信息管理系统代码_学生信息管理系统报告

    目 录 第一章 产品与服务介绍 第二章 软件工具的介绍 第三章 市场分析及定位介绍 第四章 商业模式 第五章 营销策略 第六章 财务分析 第七章 风险控制 第八章 团队介绍 第一章 产品与服务介绍 项目背景: 随着互联网用户群的越来越大,当前,全球互联网发展正进入泛在普及、深度融合、变革创新、引领转型的新阶段,对各国经济社会运行、生产生活方式、公共服务模式正…

    2023-03-11
    600
  • grep命令查找文件内容_grep命令的详细使用方法

    Grep 是必不可少的 Linux 和 Unix 命令。它用于搜索给定文件中的文本和字符串。换句话说,grep 命令在给定文件中搜索包含与给定字符串或单词匹配的行。对于开发人员和系统管理员来说,它是 Linux 和类 Unix 系统上最有用的命令之一。让我们看看如何在 Linux 或类 Unix 系统上使用 grep。 教程要求 要求 Linux/Unix/…

    2023-03-08
    2000
  • js随机数生成10到100的一个数 js产生0到100随机整数

    这几天一直在研究前台DIV元素的随机定位的问题,而这里面涉及到了JS生成随机数的方法,就下功能研究了一翻,并整理了一些资料以防以后再用得到。 JS中Math对象 在JS中可以使用 Math 对像来实现随机数的生成,但是这个对像有几个方法,先了解一下 1、js中的 ceil() 方法 ceil():方法对数字进行四舍五入,向上取整 语法: Math.ceil(…

    2023-03-13
    700
  • 电脑操作快捷键大全表格_70个电脑常用快捷键

    花了一天时间,整理出了一份含有54+Excel精选快捷键的使用技巧。并从中选出4个使用频率最高的快捷键,用熟练了,起码节省一半工作时间!(建议所有初学者都要会,下面附快捷键具体操作 快速拆分文本:Ctrl+E 一秒求和:Alt+= 迅速生成柱状图:Alt+F1 一键美化表格,实现表格数据筛选:Ctrl+T 1、快速拆分文本:Ctrl+E(不允许有人不会,是我…

    2023-03-14
    200
  • 智能指针初始化

    本节将实现一个名为SmartPointer的简化版本的shared_ptr模板类,相关C++代码如下。 知识产权协议 允许以教育/培训为目的向学生或受众进行免费引用,展示或者讲述,无须取得作者同意。 不允许以电子/纸质出版为目的进行摘抄或改编。 //Project – SmartPointer #include <iostream> using …

    2023-03-21
    000

发表回复

登录后才能评论
返回顶部
错说博客上线啦!