黑马程序员技术交流社区

标题: 毕老师的这道选择排序看不懂,给出此源代码,求讲解 [打印本页]

作者: 夜hen冷    时间: 2014-11-14 18:49
标题: 毕老师的这道选择排序看不懂,给出此源代码,求讲解
import java.util.*;
/*
对给定数组进行排序。
{5,1,6,4,2,8,9}


*/
class ArrayTest2
{

        /*
        选择排序。
        内循环结束一次,最值出现头角标位置上。
        */
        public static void selectSort(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);
                                }
                        }
                }
        }
        /*
        冒泡排序
        */

        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])
                                {
                                        /*
                                        int temp = arr[y];
                                        arr[y] = arr[y+1];
                                        arr[y+1] = temp;
                                        */
                                        swap(arr,y,y+1);
                                }
                        }
                }
        }

        /*
        发现无论什么排序。都需要对满足条件的元素进行位置置换。
        所以可以把这部分相同的代码提取出来,单独封装成一个函数。
        */
        public static void swap(int[] arr,int a,int b)
        {
                int temp = arr[a];
                arr[a] = arr[b];
                arr[b] = temp;
        }
        public static void main(String[] args)
        {
                int[] arr = {5,1,6,4,2,8,9};
                //排序前;
                printArray(arr);

                //排序
                //selectSort(arr);
                //bubbleSort(arr);

                //Arrays.sort(arr);//java中已经定义好的一种排序方式。开发中,对数组排序。要使用该句代码。
                //排序后:
                printArray(arr);
                       
        }

        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]+"]");

                }               
        }
}
作者: 王燕飞    时间: 2014-11-14 20:40
哪里不懂?

作者: 暴君    时间: 2014-11-14 20:50
你是说那个x和y选择排序,还有冒泡排序,for里面的问题么?
如果是x和y的选择排序,那么就是相邻两个数组的比较,从比如说第一个arr[0],它要从arr[1]开始,一直往后比,这种方法,基本上要和每一个数组比一下。
冒泡算法:外循环表示有多少个数,比多少次,这个明白吧,内循环减少,是因为,最大的那个数已经在第一次排序的过程中,放到了最后的位置,那么既然第一次比较时,已经知道它最大了,就没必要再比,所以减一,依次类推,所以没比较一次,就要减少比较次数一次。
总的来说就是选择排序,相邻两项总是要比,冒泡,比较次数减少。
作者: 暴君    时间: 2014-11-14 20:52
额 ,表述有点问题
你就看第二个for循环,选择排序:第一个y=x+1,冒泡则是0,但是条件语句不同。
作者: 郑飞    时间: 2014-11-15 17:49
在纸上推吧 以后还会碰到复杂的排序的 必须自己动手
作者: 小朱    时间: 2014-11-15 18:14
不知道你那里不懂




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