IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> C语言——冒泡排序(分析详解) -> 正文阅读

[数据结构与算法]C语言——冒泡排序(分析详解)

冒泡排序

排序算法的介绍

排序也称排序算法(Sort Algorithm),排序是将一组数据,依指定的顺序进行排列的过程。

排序的分类

(1)内部排序:

指将需要处理的所有数据都加载到**内部存储器(内存)**中进行排序。

(2)外部排序法:

数据量过大,无法全部加载到内存中,需要借助外部存储进行排序。

【重点】冒泡排序

1.基本介绍

冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就象水底下的气泡一样逐渐 向上冒。

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

2.冒泡排序应用实例

将五个无序的数:{3, 9, -1, 10, -2},使用冒泡排序法将其排成一个从小到大的有序数列。

3.分析冒泡的过程+代码

image-20221027211306669

代码实现:

#include <stdio.h>
int main(){
	
	int arr[] = {3,9,-1,10,-2};
	
	//第一轮排序
	
	int j;
	int t;//临时变量
	for(j=0;j<4;j++){
		
		//如果前面的数大于的后面的数,就交换
		if(arr[j]>arr[j+1]){
			t = arr[j];
			arr[j] = arr[j+1];
			arr[j+1] = t;
		}
	}
	//输出看看第一轮的排序后的情况
	for(j=0;j<5;j++){
		printf(" %d",arr[j]);	
	}
	printf("\n");
	//第二轮排序
	for(j=0;j<3;j++){
		
		//如果前面的数大于的后面的数,就交换
		if(arr[j]>arr[j+1]){
			t = arr[j];
			arr[j] = arr[j+1];
			arr[j+1] = t;
		}
	}
	//输出看看第二轮的排序后的情况
	for(j=0;j<5;j++){
		printf(" %d",arr[j]);	
	}
	printf("\n");
	
	//第三轮排序
	for(j=0;j<2;j++){
		
		//如果前面的数大于的后面的数,就交换
		if(arr[j]>arr[j+1]){
			t = arr[j];
			arr[j] = arr[j+1];
			arr[j+1] = t;
		}
	}
	//输出看看第三轮的排序后的情况
	for(j=0;j<5;j++){
		printf(" %d",arr[j]);	
	}
	
	printf("\n");
	//第四轮排序
	for(j=0;j<1;j++){
		
		//如果前面的数大于的后面的数,就交换
		if(arr[j]>arr[j+1]){
			t = arr[j];
			arr[j] = arr[j+1];
			arr[j+1] = t;
		}
	}
	//输出看看第四轮的排序后的情况
	for(j=0;j<5;j++){
		printf(" %d",arr[j]);	
	}
	return 0;
}

因为每轮排序几乎一样,因此我们可以使用for循环来处理,进行精简代码,同时定义一下数组大小的变量,arrLen,让代码更灵活

#include <stdio.h>
int main(){
	
	int arr[] = {3,9,-1,10,-2};
	
	//因为每轮排序几乎一样,因此,我们可以使用for循环处理
	
	//第一轮排序
	
	int j,i;
	int t;//临时变量
	int arrLen = sizeof(arr) / sizeof(int); // 5 数组大小
	for(i=0;i<arrLen-1;i++){
		for(j=0;j<arrLen-1-i;j++){		
		//如果前面的数大于的后面的数,就交换
		if(arr[j]>arr[j+1]){
			t = arr[j];
			arr[j] = arr[j+1];
			arr[j+1] = t;
			}
		}
		//输出看看第一轮的排序后的情况
		for(j=0;j<arrLen;j++){
			printf(" %d",arr[j]);	
		}
		printf("\n");	
	}
	return 0;
}

因为每次重复写代码太过麻烦,可以将上述代码封装成冒泡排序的函数:

#include <stdio.h>
//冒泡排序的函数
void bubbleSort(int arr[],	int arrLen){
	
	int j,i;
	int t;//临时变量	
		//因为每轮排序几乎一样,因此,我们可以使用for循环处理
	for(i=0;i<arrLen-1;i++){
		for(j=0;j<arrLen-1-i;j++){		
		//如果前面的数大于的后面的数,就交换
		if(arr[j]>arr[j+1]){
			t = arr[j];
			arr[j] = arr[j+1];
			arr[j+1] = t;
			}
		}	
	}
}

int main(){
	
	int j;
	int arr[] = {3,9,-1,10,-2};
	int arrLen = sizeof(arr) / sizeof(int); // 5 数组大小
	bubbleSort(arr,arrLen);//数组默认是地址传递 (指针)
	printf("\n排序后(函数)\n");
		for(j=0;j<arrLen;j++){
			printf(" %d",arr[j]);	
		}

	return 0;
}
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-10-31 12:25:10  更:2022-10-31 12:27:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 19:38:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码