一、冒泡排序

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

猜你喜欢

转载自blog.csdn.net/u014259820/article/details/78880516