您的位置:首页 > 理论基础 > 数据结构算法

简单排序之冒泡排序

2013-11-19 16:48 253 查看

总述

冒泡排序算法运行起来非常慢,但在概念上它是排序算法中最简单的。

原理

这个算法的思路是将最小的数据项放在数组的最开始(数组下标为0),并将最大的数据项放在数组的最后(数组下标为length-1)。

外层循环的计数器i从数组的最后开始,即i=length;每经过一次循环i-1;下标大于i的数据项都已经是排好序的。变量i在没完成一次内部循环后就左移1位,因此没有必要去处理那些已经排序完成的数据。

内层循环计数器从0开始,每完成一次内部循环体加1,当等于i时,结束循环。冒泡排序的核心是在内部循环中比较数组下标是j和j+1两个元素,如果array[j] > array[j + 1],交换两个元素。

实现

/*
* 文 件 名: BubbleSort.java
* 版 权: Beijing Jaeger Communication Electronic Technology Co., Ltd. Copyright YYYY-YYYY, All rights reserved
* 描 述: <冒泡排序>
* 修 改 人: gtsong
* 修改时间: 2013-11-19
* 跟踪单号: <跟踪单号>
* 修改单号: <修改单号>
* 修改内容: <修改内容>
*/
package com.pbi.simpleranking;

/**
* <一句话功能简述> <功能详细描述>
*
* @author
* @version [版本号, 2013-11-19]
* @see [相关类/方法]
* @since [产品/模块版本]
*/
public class BubbleSort
{
private static int[] arr = new int[] {27, 36, 18, 49, 31, 40, 5};

/**
* 排序循环执行N(N-1)/2次
* 时间复杂度O(N2)
*
* @return 排序后的结果
* @see [类、类#方法、类#成员]
*/
public static int[] sort(int[] array)
{
int tmp = -1;
for (int i = array.length; i > 1; i--)
{
for (int j = 0; j < i - 1; j++)
{
if (array[j] > array[j + 1])
{
tmp = array[j];
array[j] = array[j + 1];
array[j + 1] = tmp;

}
}
}
return array;
}

private static void display(int[] array)
{
for (int i = 0; i < array.length; i++)
{
System.out.print(arr[i] + "\t");
}
System.out.println();
}

public static void main(String[] args)
{
System.out.print("排序前:\t");
display(arr);
System.out.print("排序后:\t");
display(sort(arr));
}

}

效率

一般来说,数组中有N个数据元素,第一趟排序中有N-1次比较,第二趟中有N-2次,依此类推:(N-1)+(N-2)+…+1=N*(N-1)/2 ,交换和比较操作的次数都和N²成正比,常数不计算在大O表示法中,因此冒泡排序的时间复杂度为O(N²)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐