冒泡法排序笔记

网友投稿 928 2022-05-30

和上篇博文:简单的成绩录入系统程序及分析以及思考一样,这篇也是一年前做的笔记,真恨自己当时为什么就不知道使用博客记笔记,有了博客,就可以看到自己学习的点滴和进步,记笔记也方便,还能分享知识。

本文档致力于练习冒泡排序法,用c语言的各种语法,例如数组,指针等知识进行编程,达到既对算法的一次实践,又对语法的一次回顾,争取熟悉c编程语言,不断应用c语言,实现最后的推陈出新。

冒泡排序法是一种重要的排序思想,本次练习要实现玩转冒泡排序法,同样,本程序中的排序算法均在一个定义的函数中实现,不断改变的是数组与指针的用法,但指针仅限于列指针。下面是第一个源程序:

#include

int main()

{

void bubble(int *p,int n);    //冒泡排序法函数声明

int array[10],i;

printf("Please input 10 interger numble:\n");

for(i=0;i<=9;i++)

scanf("%d",&array[i]);        //输入十个整数

bubble(array,10);             //冒泡排序函数调用

printf("The order of the numble concerned is:\n");

for(i=0;i<=9;i++)             //输出排序后的数

printf("%d ",array[i]);

printf("\n");

return 0;

}

void bubble(int *p,int n)        //冒泡排序函数定义

{

int i,j,temp;

for(i=0;i<=n-2;i++)

for(j=0;j

if(p[j]>p[j+1])

{

temp=p[j];

p[j]=p[j+1];

p[j+1]=temp;

}

}

注意,bubble函数中的指针p,使用时用了p[]形式,这样做是为了与数组类似,便于理解。下面将其改成等效形式:

void bubble(int *p,int n)        //冒泡排序函数定义

{

int i,j,temp;

for(i=0;i<=n-2;i++)

for(j=0;j

if(*(p+j)>*(p+j+1))

{

temp=*(p+j);

*(p+j)=*(p+j+1);

*(p+j+1)=temp;

}

}

主函数中使用数组,定义函数bubble的形参使用指针时一种常用的形式,使用指针进行编程是c语言的精髓,是一种高效的形式。

下面的源程序对上述程序进行改进,将主函数中的数组也用指针进行处理:

#include

int main()

{

void bubble(int *p,int n);    //冒泡排序法函数声明

int array[10],i;

int *pp=array,*pp_end=pp+9;

printf("Please input 10 interger numble:\n");

for(;pp<=pp_end;pp++)

scanf("%d",pp);        //输入十个整数

pp=array;

冒泡法排序笔记

bubble(pp,10);             //冒泡排序函数调用

printf("The order of the numble concerned is:\n");

pp=array;

for(;pp<=pp_end;pp++)             //输出排序后的数

printf("%d ",*pp);

printf("\n");

return 0;

}

void bubble(int *p,int n)        //冒泡排序函数定义

{

int i,j,temp;

for(i=0;i<=n-2;i++)

for(j=0;j

if(*(p+j)>*(p+j+1))

{

temp=*(p+j);

*(p+j)=*(p+j+1);

*(p+j+1)=temp;

}

}

最后,介绍下冒泡程序的编程思想:

冒泡排序的思想就是依次对两个顺序的数进行比较,小的浮上来,大的沉下去。假如对N个数进行冒泡法排序,首先将N个数放入数组当中array[N],让后进行N-1次大的循环,即for(i=0;i

接着,在大循环(i=0)下进行小循环,例如第一次循环是array[0]与array[1]比较,如果array[0]大,则交换顺序,然后array[1]与array[2]比较,大的沉下去,一直到array[N-2]与array[N-1]比较,大的沉下去,总共比较了N-1-0次,经历这次比较,最大的数沉到了最下面。

之后,用同样的方法对array[0]到array[N-2]进行比较,次大的数沉到了array[N-2]的地址中,总共经历了N-1-1次比较。

当i=N-2时候,需要比较的是array[0]与array[1]即array[N-1-(N-2)],大的沉入array[1]中,则array[0]中为最小的数,这样就实现了冒泡排序。

总之,小循环的次数为N-1-i。

数据结构

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:【HDZ福州】靠谱云专有云产品负责人——流佛福分享《云平台建设与实践》
下一篇:OpenCV与Open3D等开源视觉库的详细笔记
相关文章