冒泡排序算法(C语言实现)
冒泡排序法的基本思想:两个相邻的数比较大小,较大的数下沉,较小的数上浮。
冒泡排序算法过程如下。
排序法中比较出名的就是冒泡排序,不仅好记,而且简单。该方法是将较小的元素搬移到数组的开始,将较大的元素慢慢地沉到数组的最后,数据如同水缸里的泡沫,较小的数据慢慢上浮,所以称为冒泡排序法。
冒泡排序使用双循环,外层循环采用逆序循环方法,控制循环有多少轮,每轮找到的最大的字符放在数组目前下标最大的元素中,然后进入下一轮。内层循环控制每轮比较的次数,比较紧挨着的两个字符,把数值大的字符放在下标较大的位置。
声明:《C语言系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。
冒泡排序算法过程如下。
- 比较相邻的两个数据,如果第 2 个数小,就交换位置;
- 从后向前两两比较,一直到比较最前两个数据,最终最小数被交换到起始位置,这样第 1 个最小数的位置就排好了;
- 继续重复上述过程,依次将第 2,3,…,n-1 个最小数排好位置。
排序法中比较出名的就是冒泡排序,不仅好记,而且简单。该方法是将较小的元素搬移到数组的开始,将较大的元素慢慢地沉到数组的最后,数据如同水缸里的泡沫,较小的数据慢慢上浮,所以称为冒泡排序法。
示例
按照从小到大的顺序对字符数组排序。C语言编程代码如下:#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX 20 /*冒泡排序法*/ void bubble(char *arr,int count) { int i,j,order=1; char temp; for(j=count;j>1;j--,order++) /*外循环控制比较轮数*/ { for(i=0;i<j-1;i++) /*内循环控制每轮比较的次数*/ { if(arr[i+1]<arr[i]) /*比较相邻元素*/ { temp=arr[i+1]; /*交换相邻元素*/ arr[i+1]=arr[i]; arr[i]=temp; } } printf("第%d次交换结果:[%s]\n",order,arr); /*交换后输出字符串*/ } } int main() { char array[MAX]; int count; printf("输入将排序的字符串:\n"); gets(array); /*存储字符数数组*/ count=strlen(array); /*测试字符数数组*/ bubble(array,count); return 0; }运行结果:
www.weixueyuan.net
第1次交换结果:[ww.weiwuexuan.nety]
第2次交换结果:[w.weiwuewuan.netxy]
第3次交换结果:[.weiwuewuan.netwxy]
第4次交换结果:[.eiwuewuan.netwwxy]
第5次交换结果:[.eiuewuan.netwwwxy]
第6次交换结果:[.eieuuan.netwwwwxy]
第7次交换结果:[.eeiuan.netuwwwwxy]
第8次交换结果:[.eeian.netuuwwwwxy]
第9次交换结果:[.eeai.nentuuwwwwxy]
第10次交换结果:[.eae.ienntuuwwwwxy]
第11次交换结果:[.ae.eeinntuuwwwwxy]
第12次交换结果:[.a.eeeinntuuwwwwxy]
第13次交换结果:[..aeeeinntuuwwwwxy]
第14次交换结果:[..aeeeinntuuwwwwxy]
第15次交换结果:[..aeeeinntuuwwwwxy]
第16次交换结果:[..aeeeinntuuwwwwxy]
第17次交换结果:[..aeeeinntuuwwwwxy]
冒泡排序使用双循环,外层循环采用逆序循环方法,控制循环有多少轮,每轮找到的最大的字符放在数组目前下标最大的元素中,然后进入下一轮。内层循环控制每轮比较的次数,比较紧挨着的两个字符,把数值大的字符放在下标较大的位置。
声明:《C语言系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。