1、算法原理
冒泡排序算法的操作如下:(大数沉底)
1.比较相邻的元素。如果前者比后者大,就交换它们。
2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。因此,最后的元素应该会是最大的数。
3.针对所有的元素重复以上的步骤,除了最后一个。
4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
n个数,总共需要n-1趟比较,第i个数比较的次数为n-i-1次。算法平均时间复杂度为O(n^2),最差时间为O(n^2),空间平均复杂度为O(1)。冒泡排序是稳定的排序算法。
2、代码实现
(1)JAVA实现
/*
* 排序算法:冒泡排序
* 作者:xiaoxiao
* 日期:2016-03-11
*/
public class BubbleSortMethod {
public static void main(String[]args){
int a[] = {1,4,0,23,3,4,0,5,6,0,7,8,76,32,3,45,6,7,89,65,4,3,2,1,1,1,1,12,3,0,-1};
int i;
System.out.print("排序前:");
for(i=0; i<a.length; i++){
System.out.print(a[i]+",");
}
System.out.println();
BubbleSorted(a);
System.out.print("排序后:");
for(i=0;i<a.length;i++){
System.out.print(a[i]+",");
}
}
public static void BubbleSorted(int[] arrayData){
int n = arrayData.length;
int temp;
for(int i=0;i<n-1;i++){//趟次:n-1
for(int j=0;j<n-i-1;j++){//每趟比较次数:n-i-1
if(arrayData[j]>arrayData[j+1]){
temp = arrayData[j];
arrayData[j] = arrayData[j+1];
arrayData[j+1] = temp;
}
}
}
}
}
运行结果:
(2)PHP实现
<!--
* 排序算法:冒泡排序
* 作者:xiaoxiao
* 日期:2016-03-11
-->
<?php
echo "<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />";//如果涉及到PHP网页中文乱码问题,加上该行
function BubbleSort($a){
$n = count($a);
if($n<=0){
return false;
}
for($i = 0; $i < $n-1; $i++){//趟次:n-1
for($j = 0; $j < $n-$i-1; $j++){//每趟比较次数:n-i-1
if($a[$j]>$a[$j+1]){
$temp = $a[$j];
$a[$j] = $a[$j+1];
$a[$j+1] = $temp;
}
else{
//不做处理
}
}
}
return $a;
}
$a = array(1,4,0,23,3,4,0,5,6,0,7,8,76,32,3,45,6,7,89,65,4,3,2,1,1,1,1,12,3,0,-1);
$n = count($a);
echo "排序前:";
for($i = 0; $i < $n; $i++){
echo $a[$i];
echo ", ";
}
echo "</br >";
echo "排序后:";
$b = BubbleSort($a);
for($i = 0; $i < $n; $i++){
echo $b[$i];
echo ", ";
}
?>
运行结果:
(3)python实现
#!/usr/bin/python
# -*- coding: UTF-8 -*-
def bubble_sort(lists):
n = len(lists)
for i in range(0, n - 1): # 比较趟次
for j in range(0, n - i - 1): # 每趟比较的次数:n - i - 1
if lists[j] > lists[j + 1]:
lists[j], lists[j + 1] = lists[j + 1], lists[j]
print lists
print ("第%d趟比较后的结果:%s" % ((i + 1), lists))
print "------------------------------------------------"
return lists
input_lists = [3, 6, 2, 8, 10, 1, 4, 5, 9, 7]
print "原来列表为:", input_lists
print "现在开始冒泡排序:"
bubble_sort(input_lists)
print "最后冒泡排序得到的结果为:", input_lists
结果输出:
原来列表为: [3, 6, 2, 8, 10, 1, 4, 5, 9, 7]
现在开始冒泡排序:
[3, 2, 6, 8, 10, 1, 4, 5, 9, 7]
[3, 2, 6, 8, 1, 10, 4, 5, 9, 7]
[3, 2, 6, 8, 1, 4, 10, 5, 9, 7]
[3, 2, 6, 8, 1, 4, 5, 10, 9, 7]
[3, 2, 6, 8, 1, 4, 5, 9, 10, 7]
[3, 2, 6, 8, 1, 4, 5, 9, 7, 10]
第1趟比较后的结果:[3, 2, 6, 8, 1, 4, 5, 9, 7, 10]
[2, 3, 6, 8, 1, 4, 5, 9, 7, 10]
[2, 3, 6, 1, 8, 4, 5, 9, 7, 10]
[2, 3, 6, 1, 4, 8, 5, 9, 7, 10]
[2, 3, 6, 1, 4, 5, 8, 9, 7, 10]
[2, 3, 6, 1, 4, 5, 8, 7, 9, 10]
第2趟比较后的结果:[2, 3, 6, 1, 4, 5, 8, 7, 9, 10]
[2, 3, 1, 6, 4, 5, 8, 7, 9, 10]
[2, 3, 1, 4, 6, 5, 8, 7, 9, 10]
[2, 3, 1, 4, 5, 6, 8, 7, 9, 10]
[2, 3, 1, 4, 5, 6, 7, 8, 9, 10]
第3趟比较后的结果:[2, 3, 1, 4, 5, 6, 7, 8, 9, 10]
[2, 1, 3, 4, 5, 6, 7, 8, 9, 10]
第4趟比较后的结果:[2, 1, 3, 4, 5, 6, 7, 8, 9, 10]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
第5趟比较后的结果:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
第6趟比较后的结果:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
第7趟比较后的结果:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
第8趟比较后的结果:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
第9趟比较后的结果:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
最后冒泡排序得到的结果为: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Process finished with exit code 0