您的位置:首页 > 其它

排序算法总结(1)——冒泡排序

2016-06-18 18:27 218 查看
升序排列:从第一个元素开始,对数组中两两相邻的元素比较,将值较小的元素放在前面,值较大的元素放在后面,一轮比较完毕,一个最大的数沉底成为数组中的最后一个元素,一些较小的数如同气泡一样上浮一个位置。n个数,经过n-1轮比较后完成排序。

代码如下:

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),
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  排序算法