A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 和鹏 中级黑马   /  2015-4-9 11:18  /  282 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

交流一下我对冒泡排序的理解。有不对的地方还希望各位同学指出。
对下列一组无序数字做降序排序。
5,9,36,16,48,2,14,55,41,23
冒泡排序的核心思想就是 相邻的两个数字之间进行比较,比如5和9比,5<9,9和5交换位置9就处在了第一位上。然后5再跟36比,5<36,同样交换位置36处在了第二位上。……以此类推的5再继续比下去。当5和2比较时,5>2,此时5就不于2交换位置了(因为做的是降序)。接下去就是2和之后的数字比较,直到2被交换到了最后的位置。冒泡排序的特点是每一轮比较过后都有一个最值(最大或最小)被置于末端。(这个取决于降序还是升序)。也就是说每轮比较过后下一轮都会少比较一次,因为上一轮比较已经找到了最值,第二轮比价只要找到次值就可以了,后面的以此类推。这就是冒泡的思想,不知道我说的够不够通俗易懂。下面用代码体现一下。
/*
        冒泡排序:相邻的两个元素进行比较,如果符合条件就换位。
*/

class ArrayTest
{
        public static void main(String[] args)
        {
               
                int[] arr = {4,5,8,7,100,203,56,54,2,4,2,14};  //进行降序排序
                printArray( arr);
                bubbleSort(arr);
                printArray( arr);
        }
       
        public static void  bubbleSort(int[] arr)
        {
                for(int x = 0;x<arr.length-1;x++)
                {
                        for(int y = 0;y<arr.length-x-1;y++) // -x:让每一次比较的次数减少。-1:避免角标越界比较。
                        {
                                if(arr[y]<arr[y+1])
                                {
                                        jiaohuan(arr,y,y+1);
                                }
                        }
                }
        }

        public static void jiaohuan(int[] arr,int x,int y)  
        {
                int temp = arr[x];
                arr[x] = arr[y];
                arr[y] = temp;
        }

        public static void printArray(int[] arr)
        {
                System.out.print("[");
                for(int x = 0;x<arr.length;x++)
                {
                        if(x!=arr.length-1)
                        System.out.print(arr[x]+", ");
                        else
                        System.out.println(arr[x]+"]");
                }
        }
       
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马