冒泡排序

作者: 利伊奥克儿 | 来源:发表于2017-08-29 10:14 被阅读40次

什么是冒泡排序?

冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。

这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名冒泡排序。

冒泡排序实现原理

冒泡排序算法的运作如下:(从后往前)

1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。

2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。

3.针对所有的元素重复以上的步骤,除了最后一个。

4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

示意图:

性能分析:

若记录序列的初始状态为"正序",则冒泡排序过程只需进行一趟排序,在排序过程中只需进行n-1次比较,且不移动记录;反之,若记录序列的初始状态为"逆序",则需进行n(n-1)/2次比较和记录移动。因此冒泡排序总的时间复杂度为O(n*n)。

冒泡排序:稳定算法

冒泡排序的三种算法实现(优化):

1、冒泡排序  

/**

* 第一种直接冒泡

* @param a

*/

public static void BubbleSort1(int a[])

{

int i, j;

int temp = 0;

for (i = 0; i < a.length; i++)

for (j = 1; j < a.length - i; j++)

if (a[j - 1] > a[j]) {

temp = a[j - 1];

a[j - 1] = a[j];

a[j] = temp;

}

for (int x : a) {

System.out.print(x + "  ");

}

}

 2、标志位方法

public static void BubbleSort2(int a[]) {

int j, k;

boolean flag;

k = a.length;

flag = true;

while (flag) {

flag = false;

for (j = 1; j < k; j++)

if (a[j - 1] > a[j]) {

int temp = a[j - 1];

a[j - 1] = a[j];

a[j] = temp;

flag = true;

}

k--;

}

for (int i : a) {

System.out.print(i + " ");

}

}

3、前面无序 后面有序的情况

/**

* 前面无序 后面有序的

*/

public static void BubbleSort3(int a[]) {

int j, k;

int flag;

flag = a.length;

while (flag > 0) {

k = flag;

flag = 0;

for (j = 1; j < k; j++)

if (a[j - 1] > a[j]) {

int temp = a[j - 1];

a[j - 1] = a[j];

a[j] = temp;

flag = j;

}

}

for (int i : a) {

System.out.print(i + " ");

}

}

注:冒泡排序算法是一个效率比较低下的算法,小数据的时候无所谓,如果数据量比较大的话还是建议选择其他算法

相关文章

网友评论

    本文标题:冒泡排序

    本文链接:https://www.haomeiwen.com/subject/trmgdxtx.html