ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

数据结构 ——冒泡排序

2021-12-06 21:00:28  阅读:149  来源: 互联网

标签:排序 记录 交换 冒泡排序 关键字 flag 数据结构


冒泡排序 (Bubble Sort)是一种最简单的交换排序方法,它通过两两比较相邻记录的关键字,如果发生逆序,则进行交换,从而使关键字小的记录如气泡一般逐渐往上“漂移”(左移),或者使关键字大的记录如石块一样逐渐向下“坠落”(右移)。

[算法步骤]
①设待排序的记录存放在数组r[1~n]中。首先将第一个记录的关键字和第二个记录的关键字进行比较,若为逆序(即L.[1].key>L.r[2].key),则交换两个记录。然后比较第二个记录和第三个记录的关键字。依次类推,直至第n-1个记录和第n个记录的关键字进行过比较为止。上述过程称作第一趟起泡排序,其结果使得关键字最大的记录被安置到最后一个记录的位置。


②然后进行第二趟起泡排序,对前n-1个记录进行同样操作,其结果是使关键字次大的记录被安置到第n-1个记录的位置上。

③重复上述比较和交换过程,第i趟是从L.r[1]到L.r[n-i+1]依次比较相邻两个记录的关键字,
并在“逆序”时交换相邻记录,其结果是这n -i+1个记录中关键字最大的记录被交换到第n-i+1
的位置上。直到在某一趟排序过程中没有进行过交换记录的操作,说明序列已全部达到排序要求,则完成排序。

例题:已知待排序记录的关键字序列为{49,38,63,97,76,13,27,49}请给出用冒泡排序法进行排序的过程。

 


#define ElemType int
void BubbleSort(SqList &L)
{
	//对顺序表L做冒泡排序
	int m,j,flag;
	ElemType t;
    m=L.length-1; flag=1; 				//flag用来标记某一趟排序是否发生交换
    while((m>0)&&(flag==1))
	{
		flag=0;           				//flag置为0,如果本趟排序没有发生交换,则不会执行下一趟排序
        for(j=1;j<=m;j++)
			if(L.r[j].key>L.r[j+1].key)
			{
				flag=1;					//flag置为1,表示本趟排序发生了交换
				t=L.r[j];L.r[j]=L.r[j+1];L.r[j+1]=t;	//交换前后两个记录
			}//if
		--m;
    }//while
}

标签:排序,记录,交换,冒泡排序,关键字,flag,数据结构
来源: https://blog.csdn.net/weixin_55763489/article/details/121754841

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有