您的位置:首页 > 其它

排序算法之--冒泡排序

2017-08-26 15:18 387 查看

引用自:http://blog.csdn.net/lg1259156776/ 谢谢博主分享!


冒泡属于交换排序,交换排序的基本思想是:两两比较待排序记录(数据表)的关键字(排序码),发现两个记录的次序相反时即进行交换,直到没有反序的记录为止。

冒泡算法思想及步骤:

对象个数n。最多作最多作n-1趟, i= 0, 2, …, n-1 。
第i趟中从后向前j= n-1, n-2, ……, i,顺次两两比较。
比较如果发生逆序,则交换V[j-1] 和V[j]。
冒泡排序是第一个接触也最容易理解的排序算法,因为就像泡泡一样,最轻的率先“冒”出来占据第一的位置,随后是剩下的最轻的再冒出来,占据第二的位置,就这样一步步冒出来,也就完成了排序。总之就是每一趟都是将剩余中最大或最小的数据项排在前面已经“冒”出来的数据表后面,遍历完毕也就实现了排序。

冒泡算法java实现代码:

(从小到大排序)

public class Bubble {

public void BubbleSort(int a[]) {
int i, j, temp;
int IsReplaced = 0;//用来判断是否还需要比较
for (i = 0; i <a.length-1; i++) {
IsReplaced = 0;
for (j = 0; j < a.length-1-i; j++) {//每排序一次产生的最大的数和后面的数不参与下一次排序
if (a[j] > a[j + 1]) {
temp = a[j + 1];
a[j + 1] = a[j];
a[j] = temp;
IsReplaced = 1;
}
}
System.out.print("第" + i + "趟排序结果:");
for (int k = 0; k < a.length; k++) {
System.out.print(a[k] + ",");

}
System.out.println();
if (IsReplaced == 0) break;
}

}

public static void main(String args[]) {
Bubble bubble = new Bubble();
int[] a = {4, 6, 3, 2, 9, 3, 6, 2, 0, 34, 23, 65};
bubble.BubbleSort(a);
}
}
最后测试结果如下:
第0趟排序结果:4,3,2,6,3,6,2,0,9,23,34,65,
第1趟排序结果:3,2,4,3,6,2,0,6,9,23,34,65,
第2趟排序结果:2,3,3,4,2,0,6,6,9,23,34,65,
第3趟排序结果:2,3,3,2,0,4,6,6,9,23,34,65,
第4趟排序结果:2,3,2,0,3,4,6,6,9,23,34,65,
第5趟排序结果:2
9af1
,2,0,3,3,4,6,6,9,23,34,65,
第6趟排序结果:2,0,2,3,3,4,6,6,9,23,34,65,
第7趟排序结果:0,2,2,3,3,4,6,6,9,23,34,65,
第8趟排序结果:0,2,2,3,3,4,6,6,9,23,34,65,


说明:源代码中有两处改进,一个是用来判断是否还需要进行排序,因为对于给定的数组排序的最好情况为O(n),也就是完全正序排列 最坏情况的时间复杂度为O(n*n)(抱歉,没用函数编辑器),所以我们并不需要每次都按最坏的情况来进行排序,可以加判断条件 如果当前的序列已经为有序的那就不用再进行排序了。另外一个是对每次排序后产生的最大数以及这个数后面的数也不用再进行排序,因为每次排序后产生的最大数一定是小于上一次排序后的最大数的.这两个改进都提高了代码运行效率,对于进行数量比较多的元素排序是非常有必要的!
如有错误,欢迎指正,谢谢!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: