黑马程序员技术交流社区

标题: 冒泡排序和选择排序的区别是什么? [打印本页]

作者: 奋斗的蜗牛ksd    时间: 2014-11-5 12:51
标题: 冒泡排序和选择排序的区别是什么?
什么是冒泡排序和选择排序?他们的特点和区别是什么?
如果面试问到了,怎么
回答啊?
作者: 沈木生    时间: 2014-11-5 14:02

冒泡排序:0跟1比,1跟2比,2跟3比。。。n-1跟n 这样确定最大值为n角标
               for()

选择排序:0跟1比,0跟2比,0跟3比。。。0跟n比  这样确定最小值为0角标
                   for()
作者: kenhe    时间: 2014-11-5 14:47
每一轮都把最大或最小的元素筛选出来放在相应的位置上;但是对于每一轮,比如第一轮要把1~n 中最大的那个放到n这个位置,冒泡法每次比较和移动相邻的两项而选择排序每次交换当前项和第n项。
作者: 聪明叉    时间: 2014-11-5 16:10
选择排序是外循环角标依次和后面每一位进行比较;
冒泡排序外循环仅仅控制比较次数,内循环从0角标开始,相邻位置依次比较,比较完成后最值会后移到最后一位。
作者: chuck_heima    时间: 2014-11-5 16:58
class PaiXuDemo
{
        public static void main(String[] args)
        {
                int[] arr={5,8,9,6,5,2,1};
                printArray(arr);
                getSelectSort(arr);
                //Array.sort(arr);
                printArray(arr);
        }
        /*
        最快的排序方法是:希尔排序
        Array.sort(arr) 这个是Java自带的排序方法,
                                                                正式的程序开发时是用这个方法为数组排序。
        Select :选择
        Sort :排序
        SelectSort:选择排序法
        步骤:
        1.定义一个嵌套循环
        2.
        3.
        4.


        选择排序
        内循环结束一次,最值出现在头角标的位置上
        按升序排序if(arr[x]>arr[y])
        按降序排序if(arr[x]<arr[y])
        其他代码不用改变
        */
       
        public static void getSelectSort(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])
                                {      
                                          /*int temp = arr[x];
                                                     arr[x]=arr[y];
                                                     arr[y]=temp; */
                                         swap(arr,x,y); //上面的三句话可以红这个swap函数替换掉
                                }
                        }
                }
        }
        /*
        发现无论什么排序,都需要对满足条件的函数进行位置置换
        所以可以把进行位置置换的代码提取出来,单独封装成一个函数。
        */
        public static void swap(int[] arr,int  a,int b)
        {
                int temp = arr[a];
                arr[a] = arr[b];
                arr[b] = temp;
        }
                public static void printArray(int[] arra)
                {
                        for(int x=0;x<arra.length;x++)
                        {       
                                if(x!=arra.length-1)
                                        System.out.print(arra[x]+",");
                                else
                                        System.out.println(arra[x]);
                        }
                }
}
作者: chuck_heima    时间: 2014-11-5 16:59
class PaiXuDemo1
{
        public static void main(String[] args)
        {
                int [] arr={5,9,2,6,8,7,88};
                System.out.println("排序前");
                printArray(arr);
                getBubbleSort(arr);
                System.out.println("排序后");
                printArray(arr);
        }
        /*
        Bubble:冒泡
        Sort :排序
        BubbleSort:冒泡排序
        */
        public static void getBubbleSort(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])
                                {
                                         int temp = arr[y+1];
                                                   arr[y+1]=arr[y];
                                                   arr[y]=temp;
                                }
                        }
                }
        }
        public static void printArray(int[] arra)
                {
                        for(int x=0;x<arra.length;x++)
                        {       
                                if(x!=arra.length-1)
                                        System.out.print(arra[x]+",");
                                else
                                        System.out.println(arra[x]);
                        }
                }
}





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2