简单排序之冒泡排序

来源:互联网 发布:ckplayer 源码 编辑:程序博客网 时间:2024/06/07 02:23

总述

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

原理

这个算法的思路是将最小的数据项放在数组的最开始(数组下标为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²)。




原创粉丝点击