冒泡排序算法的原理:
1、比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2、对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
3、针对所有的元素重复以上的步骤,除了最后一个。
4、持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
扩展资料:
冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。
它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。
这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。
算法稳定性:
冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以,如果两个元素相等,是不会再交换的;如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相邻起来,这时候也不会交换,所以相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。
参考资料:百度百科-冒泡排序法
它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。
冒泡排序算法的原理如下:
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
扩展资料:
举例:C语言
#include<stdio.h>
#define ARR_LEN 255/*数组长度上限*/
#define elemType int/*元素类型*/
/*冒泡排序*/
/*1.从当前元素起,向后依次比较每一对相邻元素,若逆序则交换*/
/*2.对所有元素均重复以上步骤,直至最后一个元素*/
/*elemType arr[]:排序目标数组;int len:元素个数*/
void bubbleSort(elemType arr[],int len){
elemType temp;
int i,j;
for(i=0;i<len-1;i++)/*外循环为排序趟数,len个数进行len-1趟*/
for(j=0;j<len-1-i;j++){/*内循环为每趟比较的次数,第i趟比较len-i次*/
if(arr[j]>arr[j+1]){/*相邻元素比较,若逆序则交换(升序为左大于右,降序反之)*/
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
int main(void){
elemType arr[ARR_LEN]={3,5,1,-7,4,9,-6,8,10,4};
int len=10;
int i;
bubbleSort(arr,len);
for(i=0;i<len;i++)
printf("%d\t",arr<i>);
putchar('\n');
return 0;
}
参考资料:
2 4 3 5 1 五个数
2<4 交换成为 42351
2<3 成为 43251
2<5 成为 43521
2>1 不交换 43521
然后最小的1就一定会在最后
然后比较前4个数,4>3,3<5(交换),3>2;
成为45321,
前3个数4<5(交换),4>3
就成为了54321
这是一个巧合的例子,程序应该还要比较前两个数
5>4
最后成为54321。
以下是样例程序。
#include<stdio.h>
int main()
{
int a[5]={2,4,3,5,1};
int i,j,t; //i,j是计数器,t用作交换
for(i=0;i<5;i++)
{
for(j=0;j<5-i-1;j++)
{
if(a[j]<a[j+1]) //如果后面的数字大于前面的数字
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t; //就把两个数交换
}
}
}
printf("%d %d %d %d %d\n",a[0],a[1],a[2],a[3],a[4]);
return 0; //程序正常结束
}
你懂了么?