码迷,mamicode.com
首页 > 编程语言 > 详细

排序算法之冒泡排序

时间:2016-08-18 14:39:01      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:排序算法

冒泡排序经典的排序算法,实现的思想是通过两两相邻的元素比较,使较大的数字不断向队列上部浮动,就如同水里的一个气泡一般不断向上浮,所以才得到一个"冒泡排序"好听的名字。

技术分享图片转载


那接下来我通过一个小例子来看看冒泡排序的实现:

[7,4,1,8,2]

上面的数组实现从小到大排序。

因为冒泡排序是两两相邻比较,所以

step1 
  7与4比较,7>4,交换位置后得数组:[4,7,1,8,2]
  
step2
  7与1比较,7>1,交换位置后得数组:[4,1,7,8,2]
  
step3
  7与8比较,7<8,不进行交换得数组:[4,1,7,8,2] 
  
step4
  8与2比较,8>2,交换位置后得数组:[4,1,7,2,8]

至此第一轮冒泡结束,我们看到数组中元素最大的8已经到了最后,这就是经过一轮冒泡,最大的元素已经浮动到最上面。之后只要重复这4个步骤就可以了。

但是这个没经优化的冒泡排序的时间复杂度是O(N2)。


优化的思想就是:如果数组中某个元素到最后一个元素是已经排好序的,那么这段数据就不需要进行比较并排序了。

[2,1,4,5,6,7,8]

像这个数组中,[4,5,6,7,8]是已经排好序的,只需要排[2,1]就ok。


代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>冒泡排序</title>
    <script type="text/javascript">
        function myclick(){
            var value = document.getElementById("sort_array").value;
            var array = value.split(",");
            document.getElementById("echo_array").value = mysort(array).toString();

        }
        //排序算法
        function mysort(arr){
            var i,flag = 1,temp,j=arr.length;
            while(flag){

                flag = 0;//每次数组的循环之前置为0
                for(i=1;i<j;i++){
                    if(parseInt(arr[i])>parseInt(arr[i-1])){
                        temp = arr[i];
                        arr[i] = arr[i-1];
                        arr[i-1] = temp;
                        flag = 1;//标志位,如果有交换则置为1

                    }
                }
                j = i;//记录最后一次交换的数组下标
            }
            return arr;
        }
    </script>
    <style type="text/css">
        input{
            width: 300px;
        }
    </style>
</head>
<body>
    <label>请输入待排序的数字,用逗号隔开:</label><input type="text" id="sort_array"/>
    <label>请输入待排序的数字,用逗号隔开:</label><input type="text" id="echo_array"/>
    <input type="button" value="排序" onclick="myclick()"/>
</body>
</html>

这样经过优化过的算法最好的时间复杂度是O(n),最坏的情况下还是O(N2)


本文出自 “11768293” 博客,请务必保留此出处http://11778293.blog.51cto.com/11768293/1839886

排序算法之冒泡排序

标签:排序算法

原文地址:http://11778293.blog.51cto.com/11768293/1839886

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!