冒泡排序的一般过程
冒泡排序,它比较序列中相邻元素的大小,(假设排序从小到大)如果左边的数大于右边相邻的数,则将两个数进行交换,继续和后面的数进行比较。如果左边的数小于右边相邻的数,则用右边的数往后比较。
一直重复上述过程,直到重复n-1遍后,该序列就排好了。
冒泡排序样例过程图解
以9,8,11,5,0,3为例:
第一个数9和8交换位置,9比11小,不交换位置,下一个从11开始比较。
11比5大,交换;11比0大,交换;11比3大,交换;最后11最大,确定位置。
第一个8比9小,不交换位置,下一个从9开始比较;9比5大,交换;9比0大,交换;9比3大,交换;确定位置。
第一个8比5大,交换;8比0大,交换;8比3大,交换,确定位置。
第一个5比0大,交换;5比3大,交换,确定位置。
第一个0比3小,下一个从3开始比较,3确定位置。
最后剩下0,确定位置,排好序。
c语言代码
#include <stdio.h>
#include <stdlib.h>
typedef int Elemtype;
void Bubble_Sort(Elemtype *pri,int num) //冒泡排序
{
int i,*j,temp;
for(i=0;i<num-1;i++) //执行n-1次
{
for(j=pri;j<pri+num-1-i;j++)//利用指针和后面的进行比较,后面的i个已经排好序,不需要再比较
{
if(*j>*(j+1)) //若后面的大
{
temp=*j; //交换
*j=*(j+1);
*(j+1)=temp;
}
}
}
return ;
}
int main()
{
int num;
char flag;
Elemtype *p1,*p2;
printf("请输入要排序的数的个数\n");
scanf("%d",&num);
p1=(Elemtype*)malloc(num*sizeof(Elemtype));
if(!p1)
{
printf("分配不成功\n");
exit(0);
}
printf("请输入排序数\n");
p2=p1;
for(;p2<p1+num;p2++)
{
scanf("%d",p2);
}
Bubble_Sort(p1,num);
p2=p1;
printf("排序后的结果为\n");
for(;p2<p1+num;p2++)
{
printf("%d ",*p2);
}
return 0;
}
运行结果: