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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

什么是冒泡排序和选择排序?他们的特点和区别是什么?
如果面试问到了,怎么
回答啊?

评分

参与人数 1黑马币 +1 收起 理由
杨佳名 + 1

查看全部评分

5 个回复

倒序浏览

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

选择排序:0跟1比,0跟2比,0跟3比。。。0跟n比  这样确定最小值为0角标
                   for()
回复 使用道具 举报
每一轮都把最大或最小的元素筛选出来放在相应的位置上;但是对于每一轮,比如第一轮要把1~n 中最大的那个放到n这个位置,冒泡法每次比较和移动相邻的两项而选择排序每次交换当前项和第n项。
回复 使用道具 举报
选择排序是外循环角标依次和后面每一位进行比较;
冒泡排序外循环仅仅控制比较次数,内循环从0角标开始,相邻位置依次比较,比较完成后最值会后移到最后一位。
回复 使用道具 举报
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]);
                        }
                }
}
回复 使用道具 举报
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]);
                        }
                }
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马