文章目录

  • 前言
  • 一、冒泡排序是什么?
  • 二、简单版冒泡排序
    • 1.升序,降序
    • 2.代码
  • 改进版

前言

排序方法是一种重要的,基本的算法。排序的方法很多,本章就介绍冒泡排序


一、冒泡排序是什么?

1)比较相邻的元素。如果第一个比第二个大,就交换他们两个;
2)对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数;
3)针对所有的元素重复以上的步骤,除了最后一个;
4)持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

二、简单版冒泡排序

1.升序,降序

升序思路:第一躺从第一个数开始,依次往后比较相邻的两个数,如果前面的数比后边的数大则交换两个数的位置,直到最大得数移动到后边。第二躺也从第一个数开始,不过因为最后边得数已经是最大得了不用再比较。
从冒泡的比较思路可以得如果有n个数,则要比较n-1躺,再每一趟中要比较n-j次(j是躺次)

降序则是如果前面的数比后边的数小则交换两个数的位置,其余是一样得。

2.代码

代码如下(示例):


#include <string.h>
#include <malloc.h>
#include <stdio.h>
#include <math.h>#define maxn 1000void swap(int* x, int* y) //交换元素
{int tem;tem = *x;*x = *y;*y = tem;
}void show(int* arr, int n)
{for (int i = 0; i < n; i++)printf_s("%d  ", arr[i]);printf_s("\n");
}void BubbleSort(int* arr,int key,int n)
{// 1 是升序,0是降序if (key)//升序{for (int i = 0; i < n-1; i++) // n个数只要比较 n-1次{for (int j = 0; j < n-1 - i; j++) //每一次只有进行n-i次比较{if (arr[j] > arr[j + 1])swap(&arr[j], &arr[j + 1]);}show(arr, n);}}else //降序{for (int i = 0; i < n-1; i++){for (int j = 0; j < n-1 - i; j++){if (arr[j] < arr[j + 1])swap(&arr[j], &arr[j + 1]);}show(arr, n);}}
}
int main()
{int arr[maxn] = {};//默认初始化int n;scanf_s("%d", &n);for (int i = 0; i < n; i++)scanf_s("%d", &arr[i]);BubbleSort(arr, 1,n);return 0;
}

改进版

因为排序的过程中,各元素不断接近自己的位置,如果一趟比较下来没有进行过交换,就说明序列有序, 因此要在排序过程中设置一个标志flag判断元素是否进行过交换, 从而减少不必要的比较。


#include <string.h>
#include <malloc.h>
#include <stdio.h>
#include <math.h>#define maxn 1000void swap(int* x, int* y) //交换元素
{int tem;tem = *x;*x = *y;*y = tem;
}void show(int* arr, int n)
{for (int i = 0; i < n; i++)printf_s("%d  ", arr[i]);printf_s("\n");
}void BubbleSort(int* arr,int key,int n)
{int flag = 1;// 1 是升序,0是降序if (key)//升序{for (int i = 0; i < n-1; i++) // n个数只要比较 n-1次{flag = 0;//更新标识符for (int j = 0; j < n-1 - i; j++) //每一次只有进行n-i次比较{if (arr[j] > arr[j + 1]){swap(&arr[j], &arr[j + 1]);flag = 1;}}show(arr, n);if (flag == 0)return;}}else //降序{for (int i = 0; i < n-1; i++){flag = 0;for (int j = 0; j < n-1 - i; j++){if (arr[j] < arr[j + 1])swap(&arr[j], &arr[j + 1]);}show(arr, n);if (flag == 0)return;}}
}
int main()
{int arr[maxn] = {};//默认初始化int n;scanf_s("%d", &n);for (int i = 0; i < n; i++)scanf_s("%d", &arr[i]);BubbleSort(arr, 1,n);return 0;
}

c语言数据结构-算法篇之冒泡排序相关推荐

  1. c语言数据结构-算法篇之选择排序

    文章目录 前言 一.选择排序是什么? 二.选择排序 代码 前言 排序方法是一种重要的,基本的算法.排序的方法很多,本章就介绍选择排序 一.选择排序是什么? 第一次从R[0]~R[n-1]中选取最小值, ...

  2. c语言数据结构算法设计题,数据结构题集(C语言版)算法设计题答案[].doc

    数据结构题集(C语言版)算法设计题答案[].doc 第一章 绪论 1.16 void print_descending(int x,int y,int z)// 按从大到小顺序输出三个数 { scan ...

  3. 2018汇总数据结构算法篇

    看图轻松理解数据结构和算法系列(数组) 看图轻松理解数据结构与算法系列(单向链表) 看图轻松理解数据结构与算法系列(双向链表) 看图轻松理解数据结构与算法系列(基于数组的栈) 看图轻松理解数据结构与算 ...

  4. c语言二维图像傅立叶变换,C语言数据结构算法之实现快速傅立叶变换.pdf

    C语语言言数数据据结结构构算算法法之之实实现现快快速速傅傅立立叶叶变变换换 C语语言言数数据据结结构构算算法法之之实实现现快快速速傅傅立立叶叶变变换换 本实例将实现二维快速傅立叶变换,同时也将借此实例 ...

  5. C语言实用算法系列之冒泡排序、sizeof与strlen的区别

    直接看代码 #include <stdio.h> #include<string.h> int main() {//char s[10] = { 98,68,55,'-','x ...

  6. (C语言)数据结构算法-病毒感染检测(BF算法KMP算法)

    病毒感染检测: 医学研究者最近发现了某些新病毒,得知它们的DNA序列都是环状的.为了快速检测出患者是否感染了相应的病毒,研究者将患者的DNA和病毒的DNA均表示成一些字母组成的字符串序列,然后检测某种 ...

  7. 全面详细的面试指南:数据结构与算法篇 (附答案)

    前言 背景:算法与数据结构作为技术开发者最基本的技术修养,在面试中出现的频率非常高 本文目的:花尽可能短的时间,快速学习面试中常见常考的数据结构知识及算法题 适用阅读人群:技术岗位面试开发者 本文主要 ...

  8. 【数据结构算法】-- C语言

    用C语言实现的数据结构算法,下面来一个一个讲解: (Swap函数在末尾,一个换位函数,理解即可) 1,插入排序 顾名思义就是一个值从前面开始一个一个插入,插入的时候排序一次,有 n 个数就排序 n 次 ...

  9. 数据结构与算法(五)排序算法篇

    排序算法篇 恭喜各位小伙伴来到最后一部分:排序算法篇,数据结构与算法的学习也接近尾声了,坚持就是胜利啊! 一个数组中的数据原本是凌乱的,但是由于需要,我们需要使其有序排列,要实现对数组进行排序我们之前 ...

最新文章

  1. 上升沿判断语句_FPGA入门系列6判断语句
  2. 你的灯亮着吗 读后感2
  3. [深度学习] 自然语言处理 --- ALBERT 介绍
  4. 并发200_一种单机支持 JavaWeb 容器万级并发的设想
  5. #SQL1242错误
  6. Struts2入门教程(学习教程资料).pdf
  7. 网络收包流程-网络层处理流程ip_rcv(五)
  8. python网络编程相关
  9. C# 纯真数据库读取
  10. EasyRecovery2022版支持电脑, 硬盘, U盘, 内存卡, 回收站等设备数据恢复
  11. 退出痛区-使用NDepend进行静态分析
  12. SCAU------8615 快乐
  13. 学习笔记【基金】【理财】【定投】...
  14. 罗素说过:“我是不会为自己的信念去死的,因为我不能肯定自己的信念是对的。”
  15. ios pod的使用遇到 library not found for -lPods
  16. js模块化:详解与面试
  17. C++输入密码回显星号
  18. 00HTML5学习之互联网与万维网介绍
  19. ipv6 ND neighbor
  20. Python毕设-【人脸签到系统】附源码/Python练手项目/Python毕业设计

热门文章

  1. 震惊!html文件注释也会影响运行代码!(werkzeug.routing.BuildError: Could not build url for endpoint)莫名其妙
  2. 【深度学习的数学】单层感知机是什么?
  3. Intel Realsense D435 Tensorlfow-yolov3 测试摄像头识别坐标转换成实际空间坐标的准确程度
  4. pycharm 如何跳转光标上次查看的位置 ctrl+alt+(←→)(前进和返回)
  5. python 文件操作 os.walk() 方法
  6. python 结构风险与经验风险 VC维 SRM SVM
  7. java 好用的工具类
  8. ext.js组件的基本操作
  9. python列表元素去重_python 如何进行以下list 元素去重
  10. bat查看java进程 过滤_通过查找.BAT中使用的端口来终止进程