冒泡排序
来源:互联网 发布:mac安装hexo 编辑:程序博客网 时间:2024/05/18 07:01
今天学习一下冒泡排序。
冒泡排序是学习计算机的时候,比较简单的一个排序算法,它的过程就是依次的两两比较挨着的元素,如果他们的顺序是错误的,就交换他们的位置,直到把最大(或最小)的元素放在最后一个位置。然后继续重复的再次两两比较,把次大的元素放在倒数第二个位置上,到最后,把所有的元素放在正确的位置上,这就会好像气泡依次往上浮一样。
下面是一个例子。
初始序列A[5]={【4】,2,0,3,1}
第一次:比较A【0】=4 与A【1】=2, 这时4>2,顺序错误,交换A【0】与A【1】的位置如下所示:
A【5】={2,【4】,0,3,1}
第二次:比较A【1】=4与A【2】=0,这时4>2,顺序错误,交换A【1】与A【2】的位置如下所示:
A【5】={2,0,【4】,3,1}
第三次:比较A【2】=4与A【3】=3,这时4>3,顺序错误,交换A【2】与A【3】的位置如下所示:
A【5】={2,0,3,【4】,1}
第四次:比较A【3】=4与A【4】=1,这时4>1,顺序错误,交换A【3】与A【4】的位置如下所示:
A【5】={2,0,3,1【4】}
此时数组中最大的元素4就放在了数组最后的位置上,然后就是重复上述过程:
放置次大元素:
A【5】={0,【2】,3,1,4}
A【5】={0,2,【3】,1,4}
A【5】={0,2,1,【3】,4}
放置第三大元素:
A【5】={0,2,13,4}
A【5】={0,【2】,1,3,4}
A【5】={0,1,【2】,3,4}
.
.
.
最后
A【5】={0,1,2,3,4}
最后写一段测试代码:
#include<stdio.h>void bubble_sort(int A[],int size);//冒泡排序函数声明int main(){ int a[13]={3,2,4,0,1,9,6,12,5,7,34,22,11};//初始序列 bubble_sort(a,13);//调用冒泡排序 int j=0; while(j<13)//输出排好序的数组 { printf("%d\n",a[j]); j++; } return 0;}void bubble_sort(int A[],int size)//冒泡排序{ int i,j; for(i =0;i<size-1;i++)//控制要排第几个元素 为什么是size-1? { for(j=0;j<size-i-1;j++)//控制两两交换 为什么是(size-i-1)? { if(A[j]>A[j+1])//如果A[j]>A[j+1],交换两者位置 { int temp; temp = A[j]; A[j]=A[j+1]; A[j+1]=temp; } } }}
为什么是(size-1)而不是size?因为虽然有size个元素要排序,但是如果(size-1)个元素已经排好了,那么第size个元素也就确定了,所以只要排好前(size-1)个就好了
为什么是(size-i-1),因为,如果已经有3(假设)个元素放在了正确的位置上,实际下次要排序的元素就是(size-3-1)个了。
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 线性代数导论19——行列式公式和代数余子式
- FJNU摸底赛_acdream1686(数学)
- HDOJ 题目4372 Count the Buildings(斯特林第一类数)
- matlab和C/C++混合编程--Mex
- 线性代数导论20——克莱姆法则、逆矩阵、体积
- 冒泡排序
- leetcode 第136题 Single Number
- 二进制转十进制
- Microsoft ODBC Driver 11 for SQL Server on Ubuntu
- 扬帆启航,现在开始我们仙剑demo制作之旅
- android activity 隐藏输入法
- ZooKeeper典型应用场景一览
- Debug过程鼠标悬停在复杂结构体显示相应参数
- Devour Magic 线段树