Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3875
  • 博文数量: 2
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 20
  • 用 户 组: 普通用户
  • 注册时间: 2013-12-30 20:41
文章分类

全部博文(2)

文章存档

2014年(1)

2013年(1)

我的朋友
最近访客

分类: Java

2013-12-30 21:05:13

一、简介

冒泡排序属于简单排序中的一种,是一种真的很简单的无脑排序。冒泡排序可以这么想,大的气泡往上冒。例如:有五个数字,(3,5,1,43,6),要对这几个数字进行冒泡排序,期望的结果是(1,3,5,6,43)

二、算法浅析

如上所述,我们要对(3,5,1,43,6)进行排序。

第一轮排序:

3开始比较,大的数字往后移动。

第一次比较:35比较,35没有发生变动,变为---(3,5,1,43,6)

第二次比较:51比较,51 当然变动,变为---(3,1,5,43,6)

第三次比较:543比较,543小,数据位置保持不变---(3,1,5,43,6)

第四次比较:436比较,436大,数据位置变为---(3,1,5,6,43)

第一轮排序结束。此时发现最后一个位置的数字是最大的,说明我们已经排好一个位置了,剩下四个位置需要我们继续无脑排序,当然这种事情肯定是交给计算机来做。

第一轮排序只是排好一个位置的数据,所以我们要继续想第一轮排序一样排4次。总共需要排序4轮排序。其实不是真总共需要5轮才能排出正确的,4轮就可以了,因为后面的位置都已经确定了,最后剩下一个位置就没得排了。

       其实,lz觉得,冒泡排序只是在一堆数据中找到最大的数据,然后给定一个位置,在找到次大的数据,再给定一个位置,置于位置你想怎么给就怎么给。

三、算法实现(Java

class Array {

       private long[] array;  //排序数组

       private int nElements;    //数组元素

       private int max;             //数组最大容量

       public Array(int max){

              this.max = max;

              array = new long[this.max];

              nElements = 0;

       }

 

/**

        * 插入数据

        * @param value   插入的数数据

        * @return

        */

       public boolean insert(long value){

              if(nElements < this.max){

                     array[nElements] = value;

                     nElements ++;

                     return true;

              }else{

                     return false;

              }

       }

 

       /**

        * 冒泡排序

        * @return

        */

       public void bubbleSort(){

              for(int i = nElements - 1; i > 0; i--){

                     for(int j = 0; j < i; j++){

                            if(array[j] > array[i]){

                                   swap(i, j);

                            }

                     }

              }

       }

 

       /**

        * 交换位置

        * @param i

        * @param j

        */

       private void swap(int i,int j){

              long tmp = array[i];

              array[i] = array[j];

              array[j] = tmp;

       }

 

/**

        * 转换为字符

        */

       public String toString(){

              String result = "";

              for(int i=0; i < nElements; i++){

                     result += array[i]+" ";

              }

              return result;

       }

 

}

 

测试代码:

public static void main(String[] args) {

              Array array = new Array(100);

              array.insert(3);

              array.insert(5);

              array.insert(1);

              array.insert(43);

              array.insert(6);

              System.out.println("冒泡排序: ");

array.bubbleSort()

              System.out.println(array.toString());

       }

 

四、时间复杂度分析

由上述,既然是无脑排序,那么肯定会付出血一样的代价。性能肯定往下掉。如果排序n个数字,那么要进行n-1轮循环,第一轮进行n-1次比较,第二轮进行n-2次比较,一次类推,可得到进行了n*(n-1)/2次比较。时间复杂度就为O(n2),这种排序效率不高。
注:第一次写博客,望各位路过大神指出错误。

阅读(222) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:算法中函数的增长

给主人留下些什么吧!~~