冒泡排序

原创 2015年11月19日 17:09:48
  1.     public class Test {  
          
            //待排数组  
            private static int[] data = {1, 10, 11, 23, 4, 2, 18, 47, 95, 23};  
              
            //增强for循环打印数组  
            private static void print(int[] data){  
                for(int i : data){  
                    System.out.print(i+",");  
                }  
            }  
              
            //冒泡排序的方法,一定会进行(n-1)+(n-2)+...+1=n(n-1)/2=(n^2/2-n/2)次比较,(不包含在for的条件中进行的比较)  
            //(实际准确的说,包含for循环内的比较的话,比较数为,2((n-1)+(n-2)+...+1)+n=n^2,无关大雅,时间复杂度都取决于n^2)  
            //在最坏的情况下会进行(n-1)+(n-2)+...+1=n(n-1)/2次交换,(这里即进行3次的赋值操作)。  
            //空间上,x占用了一个格子,即额外引用了一个空间来存储数据,这是个常数1。  
            //故时间复杂度O(n^2), 空间复杂度O(1)   
            private static int[] bubbleSort1(int[] data){  
                for(int i = 0;i < data.length;i++){  
                    for(int j = i+1;j < data.length;j++){  
                        //计算时所指的是下面的比较  
                        if(data[i] > data[j]){  
                            int x = data[i];  
                            data[i] = data[j];  
                            data[j] = x;  
                        }     
                    }  
                }  
                return data;  
            }  
            //这是我看到过的另外一种写法,其实思想结果是一样的。  
            //比较次数(n-1)+(n-2)+...+1=n(n-1)/2,时间复杂度同样是O(n^2)  
            private static int[] bubbleSort2(int[] data){  
                for(int i = 0;i < data.length-1;i++){  
                    for(int j = 0;j < data.length-1-i;j++){  
                        if(data[j] > data[j+1]){  
                            int x = data[j];  
                            data[j] = data[j+1];  
                            data[j+1] = x;  
                        }  
                    }  
                }  
                return data;  
            }  
            public static void main(String[] args){  
                print(bubbleSort1(data));  
            }  
        }  
版权声明:欢迎转载,但请注明出处 举报

相关文章推荐

返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)