mysql 冒泡函数_冒泡算法详述 - liddblog的个人页面 - OSCHINA - 中文开源技术交流社区...

冒泡算法

冒泡算法运行起来非常慢,但在概念上它是排序算法中最简单的,因此冒泡算法在刚开始研究排序技术时是一个非常好的算法。

冒泡算法代码:

// bubbleSort.java

// demonstrates bubble sort

// to run this program: C>java BubbleSortApp

class ArrayBub

{

private long[] a;                 // ref to array a

private int nElems;               // number of data items

//--------------------------------------------------------------

public ArrayBub(int max)          // constructor

{

a = new long[max];                 // create the array

nElems = 0;                        // no items yet

}

//--------------------------------------------------------------

public void insert(long value)    // put element into array

{

a[nElems] = value;             // insert it

nElems++;                      // increment size

}

//--------------------------------------------------------------

public void display()             // displays array contents

{

for(int j=0; j

System.out.print(a[j] + " ");  // display it

System.out.println("");

}

//--------------------------------------------------------------

public void bubbleSort()

{

int out, in;

for(out=nElems-1; out>1; out--)   // outer loop (backward)

for(in=0; in

if( a[in] > a[in+1] )       // out of order?

swap(in, in+1);          // swap them

}  // end bubbleSort()

//--------------------------------------------------------------

private void swap(int one, int two)

{

long temp = a[one];

a[one] = a[two];

a[two] = temp;

}

//--------------------------------------------------------------

}  // end class ArrayBub

class BubbleSortApp

{

public static void main(String[] args)

{

int maxSize = 100;            // array size

ArrayBub arr;                 // reference to array

arr = new ArrayBub(maxSize);  // create the array

arr.insert(77);               // insert 10 items

arr.insert(99);

arr.insert(44);

arr.insert(55);

arr.insert(22);

arr.insert(88);

arr.insert(11);

arr.insert(00);

arr.insert(66);

arr.insert(33);

arr.display();                // display items

arr.bubbleSort();             // bubble sort them

arr.display();                // display them again

}  // end main()

}  // end class BubbleSortApp

为了清晰起见,使用了一个独立的swap方法来执行交换操作,它只是交换数组中的连个数据的值,实际上使用一个独立的swap方法不一定好,因为方法调用会增加一些额外的小消耗,如果写自己使用的排序程序,最好将交换操作这段代码直接放到程序中,这样可以提高一些速度。

冒泡排序的效率

一般来说,数组中有N个数据项,则第一趟排序中有N-1次比较,第二趟中有N-2次,以此类推,这种序列的求和公式为:(N-1)+(N-2)+(N-3)+...+1=N*(N-1)/2,这样算法做了约N2/2次比较(忽略减1,不会有很大差别,特别是当N很大时)。因为在两个数在需要是才交换,所以交换的次数少于比较的次数,如果数据是随机的,那么大概有一半数据需要交换,则交换的次数为N2/4(不过在最坏的情况下,即初始数据好似逆序时,每次比较都需要交换。)

交换和比较操作次数都和N2成正比,由于常数不算在大O表示法中,可以忽略2和4,并且认为冒泡排序运行需要O(N2)时间级别。无论何时,只要看到一个循环嵌套在另一个循环里,就可以怀疑这个算法的运行时间为O(N2级别),外层循环执行N次,内部循环对于每一次外层循环都执行N次,这就意味着将大约需要执行N*N次某个基本操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值