zoukankan      html  css  js  c++  java
  • java冒泡排序

    /**
     * 冒泡排序:Java
     *
     * @author skywang
     * @date 2014/03/11
     */
    
    public class BubbleSort {
    
        /*
         * 冒泡排序
         *
         * 参数说明:
         *     a -- 待排序的数组
         *     n -- 数组的长度
         */
        public static void bubbleSort1(int[] a, int n) {
            int i,j;
    
            for (i=n-1; i>0; i--) {
                // 将a[0...i]中最大的数据放在末尾
                for (j=0; j<i; j++) {
    
                    if (a[j] > a[j+1]) {
                        // 交换a[j]和a[j+1]
                        int tmp = a[j];
                        a[j] = a[j+1];
                        a[j+1] = tmp;
                    }
                }
            }
        }
    
        /*
         * 冒泡排序(改进版)
         *
         * 参数说明:
         *     a -- 待排序的数组
         *     n -- 数组的长度
         */
        public static void bubbleSort2(int[] a, int n) {
            int i,j;
            int flag;                 // 标记
    
            for (i=n-1; i>0; i--) {
    
                flag = 0;            // 添加一个标记,如果一趟遍历中发生了交换,则标记为true,否则为false。如果某一趟没有发生交换,说明排序已经完成!
                // 将a[0...i]中最大的数据放在末尾
                for (j=0; j<i; j++) {
                    if (a[j] > a[j+1]) {
                        // 交换a[j]和a[j+1]
                        int tmp = a[j];
                        a[j] = a[j+1];
                        a[j+1] = tmp;
    
                        flag = 1;   
                    }
                }
    
                if (flag==0)
                    break;            // 退出算法
            }
        }
    
        public static void main(String[] args) {
            int i;
            int[] a = {20,40,30,10,60,50};
    
            System.out.printf("before sort:");
            for (i=0; i<a.length; i++)
                System.out.printf("%d ", a[i]);
            System.out.printf("
    ");
    
            bubbleSort1(a, a.length);
            //bubbleSort2(a, a.length);
    
            System.out.printf("after  sort:");
            for (i=0; i<a.length; i++)
                System.out.printf("%d ", a[i]);
            System.out.printf("
    ");
        }
    }

    冒泡排序时间复杂度

    冒泡排序的时间复杂度是O(N2)。
    假设被排序的数列中有N个数。遍历一趟的时间复杂度是O(N),需要遍历多少次呢?N-1次!因此,冒泡排序的时间复杂度是O(N2)。

    冒泡排序稳定性

    冒泡排序是稳定的算法,它满足稳定算法的定义。
    算法稳定性 -- 假设在数列中存在a[i]=a[j],若在排序之前,a[i]在a[j]前面;并且排序之后,a[i]仍然在a[j]前面。则这个排序算法是稳定的!

    转载自 http://www.cnblogs.com/skywang12345/p/3596232.html

  • 相关阅读:
    JNI 对象处理 (转)
    快速配置vs2012+opencv
    Jni中C++和Java的参数传递(转)
    版本控制之四:SVN客户端重新设置帐号和密码(转)
    版本控制之三:SVN合并及解决冲突(转)
    版本控制之二:SVN的初步使用(转)
    版本控制之一:SVN服务器搭建与安装(转)
    xml读取一行数据
    方法论:怎样练习一万小时
    一位软件工程师的6年总结(转)
  • 原文地址:https://www.cnblogs.com/tabCtrlShift/p/9440458.html
Copyright © 2011-2022 走看看