算法学习之旅,中级篇(3)-–冒泡排序
2017-08-18 22:22
302 查看
介绍
重复遍历数列,一次比较两个数,顺序有误就交换位置。
分析
首先,比较相邻的元素,如果不符合定义的排序规则(比如从小到大,如果后一个数比前一个数小,就是不符合定义的排序规则),就交换两个数的位置。
然后,对每一对相邻的元素做相同的比较操作,从开始第一对到倒数一对。最后的元素会是最小或者最大的数。
最后,对所有的元素都进行相同的比较操作,知道没有任何一个数需要比较后,冒泡排序就完成了。
代码
遇到的问题
冒泡排序是一种稳定的排序算法,最坏的时间复杂度是逆序重新排序,每个元素都要交换一次,时间复杂度是o(n^2);
重复遍历数列,一次比较两个数,顺序有误就交换位置。
分析
首先,比较相邻的元素,如果不符合定义的排序规则(比如从小到大,如果后一个数比前一个数小,就是不符合定义的排序规则),就交换两个数的位置。
然后,对每一对相邻的元素做相同的比较操作,从开始第一对到倒数一对。最后的元素会是最小或者最大的数。
最后,对所有的元素都进行相同的比较操作,知道没有任何一个数需要比较后,冒泡排序就完成了。
代码
#include<stdio.h> #include<stdlib.h> #define SIZE 8 void Bubble_Sort(int a[],int n) { int i,j,temp; for(j=0;j<n-1;j++) { for(i=0;i<n-1-j;i++) { if(a[i]>a[i+1]) { temp=a[i]; a[i]=a[i+1]; a[i+1]=temp; } } } return; } int main() { int number[SIZE]={95,2,4,3,6,43,2,4}; int i; for(i=0;i<SIZE-1;i++) printf("%d ",number[i]); printf("%d\n",number[i]); Bubble_Sort(number,SIZE); for(i=0;i<SIZE-1;i++) printf("%d ",number[i]); printf("%d\n",number[i]); system("pause"); return 0; }
遇到的问题
冒泡排序是一种稳定的排序算法,最坏的时间复杂度是逆序重新排序,每个元素都要交换一次,时间复杂度是o(n^2);
相关文章推荐
- PHP算法学习之“简单的交换排序”,“冒泡排序”以及“改进后的冒泡排序”
- 算法入门学习----1.1冒泡排序
- [算法学习笔记]冒泡排序和选择排序
- 经典算法学习——非循环双向链表实现冒泡排序(不带头结点)
- 算法入门学习----1.1冒泡排序
- 数据结构与算法学习——选择排序【使用上篇的冒泡排序】
- 算法入门学习----1.1冒泡排序
- 算法学习之冒泡排序,6174问题
- 算法系统学习-1排序-冒泡排序
- [学习笔记]排序算法之冒泡排序
- 经典算法学习——冒泡排序
- 学习算法之冒泡排序
- 算法学习之一 冒泡排序
- 【iOS学习笔记】iOS算法(四)之冒泡排序
- 算法学习之旅,中级篇(1)-–选择排序
- 经典算法学习——单链表实现冒泡排序(带头结点)
- 黑马程序员—Java基础学习笔记之排序算法:选择排序&冒泡排序
- 经典算法学习——链表实现冒泡排序
- 算法学习之旅,中级篇(7)-–递归之汉诺塔
- 算法学习笔记之冒泡排序