C语言——冒泡排序(分析详解)

这篇具有很好参考价值的文章主要介绍了C语言——冒泡排序(分析详解)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

冒泡排序

排序算法的介绍

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

排序的分类

(1)内部排序:

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

(2)外部排序法:

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

【重点】冒泡排序

1.基本介绍

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

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

2.冒泡排序应用实例

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

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

冒泡排序c语言,C学习笔记篇,c语言,排序算法,算法

代码实现:

#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;
}

因为每次重复写代码太过麻烦,可以将上述代码封装成冒泡排序的函数:文章来源地址https://www.toymoban.com/news/detail-771434.html

#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;
}

到了这里,关于C语言——冒泡排序(分析详解)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 排序:冒泡排序算法分析

    基于“交换”的排序︰ 根据序列中两个元素的比较结果来对换这两个记录在序列中的位置。 交换排序包括 冒泡排序 和 快速排序 。 1.算法原理 从后往前(或从前往后)两两比较相邻元素的值, 若为逆序(即 A [ i − 1 ] A [ i ] A[i-1]A[i] A [ i − 1 ] A [ i ] ) ,则交换它们,直到

    2024年02月07日
    浏览(39)
  • 【排序算法】冒泡排序(C语言)

    【排序算法】—— 冒泡排序 ​ 冒泡排序法:(Bubble sort)是一种基础的交换排序,非常简单,一学就懂 ​ 对数组进行遍历,每次对相邻两个进行比较大小,若大的数值在前面则交换位置(升序),完成一趟遍历后数组中最大的数值到了数组的末尾位置,再对前面n-1个数值进

    2024年02月06日
    浏览(55)
  • 排序算法之详解冒泡排序

    冒泡排序顾名思义,就是像冒泡一样,泡泡在水里慢慢升上来,由小变大。 虽然冒泡排序和冒泡并不完全一样,但却可以帮助我们理解冒泡排序。 一组无序的数组,要求我们从小到大排列 我们可以先将最大的元素放在数组末尾 再将第二大的数放在数组的倒数第二个位置 再

    2023年04月25日
    浏览(89)
  • 选择排序 | 冒泡排序 | C语言(详解)

    1,基本知识 对排序的双层 for 循环的理解:外层 控制趟数,里层 不断地对数组进行遍历。 2,逐层深入 经典的选择排序GIF动图,如下:   关键部分: Ⅰ ,从数组中的第一个元素开始,不断地选定一个元素(引用其下标 markindex,如下代码)与其之后的元素进行比较,如果发

    2024年02月04日
    浏览(40)
  • 排序算法——冒泡排序详解及优化

    对于一个排序算法,假设两个相同的元素Ai和Aj· 在排序前这两个元素满足条件ij,即Ai在Aj之前· 在排序后Ai仍在Aj之前,则称为排序算法为稳定排序· 否则称这个算法为不稳定排序 稳定性的说明 排序的稳定性并不影响排序算法的效率,稳定性只对类/结构体类型数据有影响 这

    2024年02月06日
    浏览(40)
  • 两个基本排序算法【选择排序,冒泡排序】【详解】

    一、前言 二、选择排序 2.1 选择排序(基础版)【必会】 2.2 选择排序(优化版) 三、冒泡排序 3.1 冒泡排序(基础版)【必会】 3.2 冒泡排序(外循环优化版) 3.3 冒泡排序(内循环优化版) 四、总结   排序法主要分为两种: 比较排序 和 非比较排序 。常见的比较排序有

    2024年02月03日
    浏览(34)
  • 【排序算法】C语言实现选择排序与冒泡排序

    这里是阿辉算法与数据结构专栏的第一篇文章,咱们就从排序算法开始讲起,排序算法有很多大致分为两类:基于比较的排序和非比较的排序 基于比较的排序:冒泡、选择、插入、希尔、堆、归并、随机快排 非比较的排序:桶排序 以上的排序算法阿辉都会讲到,今天阿辉主

    2024年02月04日
    浏览(44)
  • C语言算法——实现冒泡排序

    默认数组中的第一个数是原本数组中排好序的第一个数,然后每次将排好序的数组的后面的第一个数作为哨兵。每次哨兵都和前面的排好序的数组中的数从后往前进行比较,然后将哨兵插入到已经排好序的数组中。然后哨兵逐渐往后移动,逐步将哨兵插入到数组中,这就是

    2024年02月04日
    浏览(50)
  • 排序算法之冒泡排序详解-python版

    冒泡排序:通过比较2个相邻元素之间的大小,交换元素顺序,从而达到排序目的。 从百度百科摘抄下来的冒泡排序原理如下: 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的

    2024年02月17日
    浏览(37)
  • 算法笔记【4】-冒泡排序法改进

    冒泡排序是一种简单但效率较低的排序算法。冒泡排序通过比较相邻元素并交换位置来实现排序。具体而言,它从数组的第一个元素开始,依次比较相邻的两个元素,如果顺序错误则交换它们的位置,直到整个数组排好序为止。但是冒泡排序算法的时间复杂度为O(n^2),不管数

    2024年02月07日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包