zoukankan      html  css  js  c++  java
  • JAVA 蹒跚自学之 第七日 数组选择 冒泡排序优化

    原来的选择排序代码

                        int [] arr = new int[]{3,2,6,9,34,66,11};

         public static void xuanze(int[] arr)

    {

                         for (int x=0;x<arr.length-1;x++)

                           {

                                      for(int y=x+1;y<arr.length;y++)

                                           {

                                                 if(arr[x]>arr[y]

                                                   { arr[x]=arr[x]^arr[y];

                                                     arr[y]arr[x]^arr[y];

                                                     arr[x]=arr[x]^arr[y];

                                                    }

                                            }

                            }

    }

    分析:每次满足条件都要进行数据的换位,系统资源消耗比较大

    优化后

        public static void xuanze_1(int[] arr)
            {
                for (int x=0;x<arr.length-1 ;x++ )  // 完成 X位元素的提取 
                {
                    int temp =arr[x];
                    int index = x;

                    for (int y=x+1;y<arr.length ;y++ )  // 完成 X位外的所有元素的值的提取
                    {
                        if (temp>arr[y])       // 每次满足条件都要进行数据的换位  可以先用一变量记录住最终比较的值,然后进行一次换行即可
                        {

                            temp = arr[y];
                             index =y;
                               /* arr[x]=arr[x]^arr[y];// 完成互换
                                arr[y]=arr[x]^arr[y];
                                arr[x]=arr[x]^arr[y]; */

                        }
                    }

                         if(x!=index)
                                 { 
                                    arr[x]=arr[x]^arr[index];// 完成互换
                                    arr[index]=arr[x]^arr[index];
                                    arr[x]=arr[x]^arr[index];
                                 }

                }
            }

    关于 利用第三方变量进行的数据置换 与  异或 进行的数据置换的  区别   

      前者可以完成所有数据的置换  包括两个相等的数

    者只能置换两个不一样的数 ,否则运算出错 。如果想利用此方法来完成,必须加入首要条件 判断 。if(x!=y)

      前者加入此判断可以减少两个相等的数据置换,不加入也不会出错的,,只是浪费了一次没有必要的系统资源支出。而后者在浪费系统资源的同时,也会计算出错。所以 if的判断必须加上 。

    总结:无论利用那种方法,我们都要加入if 判断 。冒泡方法的优化,不再复述。

     

                                                                              2015-5-26  

  • 相关阅读:
    Promise
    includes()
    常见的数组去重方法
    concat()
    面试感想
    常见的前端面试题
    让div水平垂直居中的几种方法
    实现斐波拉契的几种方法
    使用lib-flexible
    什么是token
  • 原文地址:https://www.cnblogs.com/gailuo/p/4530279.html
Copyright © 2011-2022 走看看