数据结构——冒泡排序
一、排序算法概况
1.排序思想
通过比较相邻两个元素,将较大(较小)的元素往后交换,每一趟排序即可将序列中最大(最小)的元素交换到序列最后位置,且该元素不参与下一趟排序,这样经过n-1趟排序,即可完成对序列的升序(降序)排序。
2.改进思路
若序列本身是基本有序的状态,那么可能经过前几趟排序,序列就已经达到有序状态,但是算法还是会继续执行,所以可以在算法实现中加入一个标志flag,flag初始为0,若该趟排序进行了元素交换,则置flag为1,若经过一趟排序后flag没有改变还是为0,即排序过程中没有发生交换,则序列已经达到有序,此时可直接退出排序。
二、代码实现
1.完整代码
#include<stdio.h>void BubbleSort(int array[], int size);//冒泡排序
void Swap(int* num1, int* num2);//整数交换
void Printf_array(int array[], int size);//数组打印
void Test_BubbleSort();//测试函数int main() {Test_BubbleSort();return 0;
}void BubbleSort(int array[], int size) {//冒泡排序for (int i = 0; i < size - 1; i++) {int flag = 0;for (int j = 0; j < size - i - 1; j++) {//排升序if (array[j] > array[j + 1]) {Swap(&array[j], &array[j + 1]);flag = 1;}}if (!flag) {//元素已经达到有序状态break;}}
}void Swap(int* num1, int* num2) {int temp = *num1;*num1 = *num2;*num2 = temp;
}void Printf_array(int array[], int size) {for (int i = 0; i < size; i++) {printf("%d ", array[i]);}
}void Test_BubbleSort() {//测试函数int array[] = { 8,10,6,45,8,65,42,20,9,54 };int size = sizeof(array) / sizeof(array[0]);printf("排序前:");Printf_array(array, size);BubbleSort(array, size);printf("\n排序后:");Printf_array(array, size);
}
2.测试结果
三、性能分析
1.时间复杂度:O()
2.空间复杂度:O(1)
3.稳定性:稳定
数据结构——冒泡排序相关推荐
- 数据结构----冒泡排序
数据结构----冒泡排序 原理:参考趣学数据结构 代码: #include<stdio.h> #include<stdlib.h> void bubbleSort(int a[ ...
- 数据结构-冒泡排序过程
本文内容 冒泡排序 运行过程 冒泡排序 #include <stdio.h> #define N 10 #define LT(a,b) ((a)<(b)) #define TRUE ...
- 数据结构-冒泡排序最优代码(C语言)
冒泡排序的基本思想 冒泡排序也称气泡排序,是一种典型的交换排序方法,其基本思想是通过无序区中相邻元素关键字间的比较和位置的交换使关键字最小的元素如气泡一般逐渐往上"漂浮",直至&q ...
- python算法与数据结构-冒泡排序算法
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.这步做完后,最后的元素会是最大的数. 冒泡排序(英语:bubble sort)是一种简单的排序算法.它重复地遍历要排序的数列,一次比较两个元 ...
- python算法与数据结构-冒泡排序算法(32)
阅读目录 一.冒泡排序介绍 二.冒泡排序原理 三.冒泡排序图解 四.冒泡排序总结 五.冒泡排序python代码实现 六.冒泡排序C语言代码实现 七.冒泡排序的优化 八.冒泡排序的时间复杂度 九.冒泡排 ...
- 数据结构——冒泡排序(C语言)
C语言详解冒泡排序 一.基本思想 二.算法实现及优化 三.代码清单 一.基本思想 冒泡排序是交换排序中最易理解也最经典的一个排序,其基本思想是从左向右依次比较相邻两个元素的大小,如果左边大于右边就交换 ...
- 数据结构—冒泡排序 C语言代码实现(从前向后/从后向前两种)
冒泡排序的思想就是交换,假设要使序列排为递增 如果从左到右比较,则如果左边的比较大就交换, 如果从右向左比较,则右边的比较小就交换. //冒泡排序-从左到右交换 void Bubblesort(int ...
- C语言数据结构+冒泡排序的实现
冒泡排序 一.单项冒泡排序 1.算法思路 2.循环流程 3.伪代码实现 二.双向冒泡排序 1.双向冒泡排序的概念 2.双向冒泡排序流程 3.双向冒泡排序伪代码 三.总结 一.单项冒泡排序 单向冒泡排序 ...
- Caché 算法与数据结构
第一章 Caché 算法与数据结构 基础和概念 ☆☆☆☆☆ 第二章 Caché 算法与数据结构 数组原理 ☆☆☆☆☆ 第三章 Caché 算法与数据结构 链表原理 ☆☆☆☆☆ 第四章 Caché 算法 ...
最新文章
- 济南交警推出《酒驾整治日历》酒驾为每日必查项
- IBM和Lightbend宣布构建新认知开发平台的战略
- 深入理解 SVG 系列(一) —— SVG 基础
- 机器学习-特征工程中的特征降维
- 【软考之路】关于上周参加的软考的几点感想
- linux 64位 安装qt creator .run,Qt Creator安装
- java23种设计模式个人整理_java23种设计模式-行为型模式之模板方法模式
- windows下安装和使用scrapy
- Linux设备驱动程序(第三版)/深入理解计算机系统(原书第2版)/[Android系统原理及开发要点详解].(韩超,梁泉)百度云盘下载
- Android之Adapter总结
- Dialog详解(包括进度条、PopupWindow、自定义view、自定义样式的对话框)
- Python 算法设计(2) - 大数运算 - 基于字符串的数字运算和进位
- php 生成电话名片二维码
- 中州韵输入法 linux 小鹤双拼,Rime输入法配置——小鹤双拼
- Tomb Raider(暴力模拟)
- 产品经理的职业生涯规划
- android 多版本共存,Android 多版本共存的处理方式
- JAVA集合和字符串互转
- OpenCV - 汽车识别
- SpringBoot经典学习笔记
热门文章
- 编程中保护眼睛的颜色
- 使用pdfBox实现pdf转图片出现中文方块乱码 简单修改源码解决
- 第九周—等比数列求和
- Golang基础教程——字符串常用方法总结
- 【滤波跟踪】基于matlab捷联惯导仿真【含Matlab源码 1935期】
- Leecode- 584. 寻找用户推荐人
- 电子计算机储存五次信息革命,人类历史上五次信息革命
- C++ 并发指南 std::lock
- (转)Unity 5.6 光照烘焙系统介绍
- 51单片机usb烧录电路_STC51单片机自动ISP下载电路设计 - ch340g单片机下载程序电路原理...