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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

自己知道好几个版本的选择排序,但不知道哪个是最正宗的

8 个回复

正序浏览
选择排序的话2楼才是最优的
回复 使用道具 举报
nblity007 发表于 2016-7-28 22:24
这。。百度不就好咯

不太确定哪种是最优的,所以就来这里问了
回复 使用道具 举报
这。。百度不就好咯

回复 使用道具 举报
路过,路过。。
回复 使用道具 举报
贴上自己之前在别的帖子的回答,冒泡+选择,希望可以对你有点用
冒泡排序代码:
public static void BubbleSort(int [] arr) {//冒泡排序
                int a = 0;
                for (int i = 0; i < arr.length - 1; i++) {
                        for (int j = 0; j < arr.length - 1 - i; j++) {
                                if (arr[j] > arr[j+1]) {
                                        a = arr[j];
                                        arr[j] = arr[j+1];
                                        arr[j+1] = a;
                                }
                        }
                }
举个例子:数组长度为6,用5次排序完成,这也是为什么第一层循环里i < arr.length -1
就是每一次相邻两个比大小,大的滚到后面去~
第一次                                第二次                               第三次                                第四次                              第五次
90 80 70 60 50 40             80 70 60 50 40 90            70 60 50 40 80 90              60 50 40 70 80 90           50 40 60 70 80 90
80 90 70 60 50 40             70 80 60 50 40 90            60 70 50 40 80 90              50 60 40 70 80 90           40 50 60 70 80 90
80 70 90 60 50 40             70 60 80 50 40 90            60 50 70 40 80 90              50 40 60 70 80 90
80 70 60 90 50 40             70 60 50 80 40 90            60 50 40 70 80 90
80 70 60 50 90 40             70 60 50 40 80 90
80 70 60 50 40 90            
        ---------------------------------------------------------------我是分割线------------------------------------------------------------------
       选择排序代码:        public static void SelectSort(int [] arr){//选择排序
                int a =0;
                for (int i = 0; i < arr.length - 1; i++) {
                        for (int j = i + 1; j < arr.length; j++) {                                
                                if (arr > arr[j]) {
                                a = arr;
                                arr = arr[j];
                                arr[j] = a;                                       
                                }
                        }
                }
同样一个例子,选择排序是第一个先和第二个比,小的滚前面,然后第一个依次和后面比

第一次                               第二次                             第三次                            第四次                              第五次
90 80 70 60 50 40            40 90 80 70 60 50          40 50 90 80 70 60          40 50 60 90 80 70           40 50 60 70 90 80
80 90 70 60 50 40            40 80 90 70 60 50          40 50 80 90 70 60          40 50 60 80 90 70           40 50 60 70 80 90
70 90 80 60 50 40            40 70 90 80 60 50          40 50 70 90 80 60          40 50 60 70 90 80
60 90 80 70 50 40            40 60 90 80 70 50          40 50 60 90 80 70
50 90 80 70 60 40            40 50 90 80 70 60
40 90 80 70 60 50

点评

这个太给力了,感谢感谢  发表于 2016-7-28 23:08
这个好给力 太感谢了  发表于 2016-7-28 23:06
回复 使用道具 举报
int  [] arr={20,35,18,3,47,8};
                for (int i = 0; i < arr.length; i++) {
                        int m=i;
                        for (int j = i+1; j < arr.length; j++) {
                                if(arr[m]>arr[j]){
                                        m=j;
                                }
       
                        }
                        if(i!=m){
                                int temp=arr[i];
                                arr[i]=arr[m];
                                arr[m]=temp;
                        }
                }
                System.out.println(Arrays.toString(arr));   //转换成字符串输出
   
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马