排序算法总结(1)——冒泡排序
2016-06-18 18:27
218 查看
升序排列:从第一个元素开始,对数组中两两相邻的元素比较,将值较小的元素放在前面,值较大的元素放在后面,一轮比较完毕,一个最大的数沉底成为数组中的最后一个元素,一些较小的数如同气泡一样上浮一个位置。n个数,经过n-1轮比较后完成排序。
代码如下:
此算法的目的是将最小的元素放在数组下标为0的位置,并将最大的元素放在数组的最后,也就是下标为n-1的位置。
外层for循环的计数器out从数组的最后开始,即out=n-1,每经过一次循环,out减去1。比out大的元素已经是排序好的元素。
内层for循环的计数器in从0开始,即in=0,每完成一次循环in加1,当in=out时结束内层for循环。在内层for循环中,数组下标为in和in+1的两个数据项进行比较,如果下标为in的数据项大于下标为in+1的数据项,则交换两数据项。
效率问题:
数组中有N个元素,第一塘排序进行N-1次比较,第二次排序进行N-2次比较,一次类推。公式表示为(N-1)+(N-2)+...+1
交换次数可能少于比较次数,在完全逆序的最坏情况下才和比较次数相同
所以比较和交换次数都与N的平方成正比。
无论何时,只要看到一个循环嵌套在另一个循环里就可以怀疑运行时间为O(N2),
代码如下:
public class BubbleSort { private long a[]; private int nElemts; public void bubbleSort(){ int out,in; for(out=nElemts-1;out>1;out--){ for(in=0;in<out;in++){ if(a[in]<a[in+1]){ swap(in,in+1); } } } } private void swap(int m,int n){ int temp=m; a[m]=a ; a =temp; } }
此算法的目的是将最小的元素放在数组下标为0的位置,并将最大的元素放在数组的最后,也就是下标为n-1的位置。
外层for循环的计数器out从数组的最后开始,即out=n-1,每经过一次循环,out减去1。比out大的元素已经是排序好的元素。
内层for循环的计数器in从0开始,即in=0,每完成一次循环in加1,当in=out时结束内层for循环。在内层for循环中,数组下标为in和in+1的两个数据项进行比较,如果下标为in的数据项大于下标为in+1的数据项,则交换两数据项。
效率问题:
数组中有N个元素,第一塘排序进行N-1次比较,第二次排序进行N-2次比较,一次类推。公式表示为(N-1)+(N-2)+...+1
交换次数可能少于比较次数,在完全逆序的最坏情况下才和比较次数相同
所以比较和交换次数都与N的平方成正比。
无论何时,只要看到一个循环嵌套在另一个循环里就可以怀疑运行时间为O(N2),
相关文章推荐
- JavaScript演示排序算法
- 算法之排序算法的算法思想和使用场景总结
- PHP版本常用的排序算法汇总
- JavaScript实现多种排序算法
- php 地区分类排序算法
- js三种排序算法分享
- Javascript中的常见排序算法
- java 合并排序算法、冒泡排序算法、选择排序算法、插入排序算法、快速排序算法的描述
- 使用Java实现希尔排序算法的简单示例
- 排序算法的javascript实现与讲解(99js手记)
- 图文详解Heap Sort堆排序算法及JavaScript的代码实现
- C++中十种内部排序算法的比较分析
- Java实现几种常见排序算法代码
- 浅谈javascript实现八大排序
- C语言演示对归并排序算法的优化实现
- PHP常用的排序和查找算法
- JavaScript中九种常用排序算法
- STl中的排序算法详细解析
- 算法学习入门之使用C语言实现各大基本的排序算法
- PHP四种基本排序算法示例