排序算法:冒泡排序
2014-11-14 13:41
176 查看
排序算法是处理数据最基础的算法,掌握各种排序算法有利以后遇到数据时的处理。首次学习,先学习冒泡排序。
冒泡排序原理:对一组待排序数据x1,x2,x3,x4,x5,x6,x7.......xn,冒泡排序算法指针(这里的指针并不是实际的指针,只是为方便而假象的一个类似指针的东西)从第一个数据开始,与其后面的一个数据比较(假设是要求是从小到大排序),如果排序指针所指的数据比其后面的一个数据大,那么就把排序指针所指的数据和它后面的数据位置交换,一次比较完成之后,将排序指针加1指向下一个数据,如此重复上面的过程直到排序指针指向第n个数据,从第一个数据比较到最后一个数据
,数据中最大的一个就被排到数据的最后(最大数据沉到最底下),然后又将排序指针指向第一个数据,重复上面的比较过程,知道知道排序指针指向第n-1个数据,每比较一趟,下一次排序时指针所指的最后一位数据都要向前移动一位,知道排序指针所指的最后一个数据是整个数据组的第一个数据的时候,那么说明排序finished!
算法分析:
最好的时间复杂度:O(n),一趟扫描就完成排序,数据移动的次数为0:
最坏时间复杂度:n(n-1)/2=O(n^2),数据完全反序,每次比较都需要进行数据移动
平均时间复杂度:O(n^2),虽然冒泡排序不一定要比较n-1趟,但由于他每次移动的次数较多,故平均时间性能比较差.
算法稳定性:冒泡排序时就地排序,是稳定的排序算法。
代码:
冒泡排序原理:对一组待排序数据x1,x2,x3,x4,x5,x6,x7.......xn,冒泡排序算法指针(这里的指针并不是实际的指针,只是为方便而假象的一个类似指针的东西)从第一个数据开始,与其后面的一个数据比较(假设是要求是从小到大排序),如果排序指针所指的数据比其后面的一个数据大,那么就把排序指针所指的数据和它后面的数据位置交换,一次比较完成之后,将排序指针加1指向下一个数据,如此重复上面的过程直到排序指针指向第n个数据,从第一个数据比较到最后一个数据
,数据中最大的一个就被排到数据的最后(最大数据沉到最底下),然后又将排序指针指向第一个数据,重复上面的比较过程,知道知道排序指针指向第n-1个数据,每比较一趟,下一次排序时指针所指的最后一位数据都要向前移动一位,知道排序指针所指的最后一个数据是整个数据组的第一个数据的时候,那么说明排序finished!
算法分析:
最好的时间复杂度:O(n),一趟扫描就完成排序,数据移动的次数为0:
最坏时间复杂度:n(n-1)/2=O(n^2),数据完全反序,每次比较都需要进行数据移动
平均时间复杂度:O(n^2),虽然冒泡排序不一定要比较n-1趟,但由于他每次移动的次数较多,故平均时间性能比较差.
算法稳定性:冒泡排序时就地排序,是稳定的排序算法。
代码:
void BubbleSort(void * data,int length) { int i,j; for(i=0;i<length;j++) //总共比较的趟数 { for(j=0;length-i;j++)//每趟比较比较的次数 { if(data[i]>data[i+1]) { t=data[i]; data[i]=data[i+1]; data[i+1]=t; } } } }
相关文章推荐
- 排序算法-冒泡排序
- 排序算法(一)- 冒泡排序
- 排序算法总结1-冒泡排序
- Java-排序算法-冒泡排序
- 排序算法之冒泡排序
- #.java实现排序算法:插入排序、选择排序、冒泡排序
- 排序算法之冒泡排序
- js实现排序算法(冒泡排序,直接插入排序)
- [排序算法总结]冒泡排序、简单选择排序
- 冒泡排序、插入排序、选择排序、希尔排序、堆排序、归并排序等常用排序算法的比较
- 排序算法之冒泡排序、选择排序、直接插入排序(java实现)
- 基础排序算法(一)——冒泡排序
- 排序算法_冒泡排序
- Java排序算法总结之冒泡排序
- 排序算法 -- (五)冒泡排序
- Java8大排序算法-冒泡排序
- C++实现八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序等
- 两种排序算法 插入排序 和冒泡排序:插入排序要比冒泡快2倍以上
- 排序算法之—冒泡排序
- 排序算法:冒泡排序