概述
设待排序的表有10个元素,其关键字分别为(9,8,7,6,5,4,3,2,1,0),说明采用冒泡排序方法进行排序的过程。
冒泡排序(Bubble Sort)是一种交换排序,它的基本思想是:两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止。
Code:
#include <stdio.h>
#define MAXL 100 //最大长度
typedef int KeyType; //定义关键字类型为int
typedef char InfoType; // 可以使用它来为类型取一个新的名字
typedef struct
{ KeyType key; //关键字项--int key
InfoType data; //其他数据项,类型为InfoType--char data
} RecType; //定义了一个结构体,名字叫RecType,名字是自己取的。
void CreateList(RecType R[],KeyType keys[],int n) //创建顺序表 --R是一个数组,数组内的每个元素是一个结构体
{ for (int i=0;i<n;i++) //R[0..n-1]存放排序记录
R[i].key=keys[i];
}
void DispList(RecType R[],int n) //输出顺序表
{
for (int i=0;i<n;i++)
printf("%d ",R[i].key);
printf("n");
}
void BubbleSort(RecType R[],int n) //RecTyoe存放数据元素,int n存放数据个数
{ int i,j;
bool exchange;
RecType tmp;
for (i=0;i<n-1;i++) //0~n-2 1~n-1 9
{
exchange=false; //一趟前exchange置为假
for (j=n-1;j>i;j--) //归位R[i],循环n-i-1次
if (R[j].key<R[j-1].key) //相邻两个元素反序时
{
tmp=R[j]; //将这两个元素交换
R[j]=R[j-1];
R[j-1]=tmp;
exchange=true; //一旦有交换,exchange置为真
}
printf(" i=%d: ",i);
DispList(R,n);
if (!exchange) //本趟没有发生交换,中途结束算法,exchange != true 或者exchange==false
return;
}
}
int main()
{
int n=10;
RecType R[MAXL];
KeyType a[]={0,1,7,2,5,4,3,6,8,9};
CreateList(R,a,n);
printf("排序前:"); DispList(R,n);
BubbleSort(R,n);
printf("排序后:"); DispList(R,n);
return 0;
}
算法分析:
算法的平均时间复杂度为O(n^2)
当i>j
且R[i].Key=R[j].Key
时,两者没有逆序,不会发生交换,也就是说使R[i]
和R[j]
的相对位置保持不变,所以冒泡排序是一种稳定的排序方法。
最后
以上就是炙热豌豆为你收集整理的冒泡排序(Bubble sort)的全部内容,希望文章能够帮你解决冒泡排序(Bubble sort)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复