黑马程序员技术交流社区

标题: 哪位大神可以共享一段选择排序的代码? [打印本页]

作者: MayDay-    时间: 2016-7-28 21:40
标题: 哪位大神可以共享一段选择排序的代码?
自己知道好几个版本的选择排序,但不知道哪个是最正宗的
作者: 花陌相惜    时间: 2016-7-28 21:59
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));   //转换成字符串输出
   
作者: rockphoenix    时间: 2016-7-28 22:08
贴上自己之前在别的帖子的回答,冒泡+选择,希望可以对你有点用
冒泡排序代码:
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


作者: nengYouDuoNiu    时间: 2016-7-28 22:18
路过,路过。。
作者: nblity007    时间: 2016-7-28 22:24
这。。百度不就好咯


作者: MayDay-    时间: 2016-7-28 23:13
nblity007 发表于 2016-7-28 22:24
这。。百度不就好咯

不太确定哪种是最优的,所以就来这里问了
作者: 13411939415    时间: 2016-7-29 18:10
选择排序的话2楼才是最优的




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