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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

                }               
        }
}

5 个回复

正序浏览
不知道你那里不懂
回复 使用道具 举报
在纸上推吧 以后还会碰到复杂的排序的 必须自己动手
回复 使用道具 举报
额 ,表述有点问题
你就看第二个for循环,选择排序:第一个y=x+1,冒泡则是0,但是条件语句不同。
回复 使用道具 举报
你是说那个x和y选择排序,还有冒泡排序,for里面的问题么?
如果是x和y的选择排序,那么就是相邻两个数组的比较,从比如说第一个arr[0],它要从arr[1]开始,一直往后比,这种方法,基本上要和每一个数组比一下。
冒泡算法:外循环表示有多少个数,比多少次,这个明白吧,内循环减少,是因为,最大的那个数已经在第一次排序的过程中,放到了最后的位置,那么既然第一次比较时,已经知道它最大了,就没必要再比,所以减一,依次类推,所以没比较一次,就要减少比较次数一次。
总的来说就是选择排序,相邻两项总是要比,冒泡,比较次数减少。
回复 使用道具 举报
哪里不懂?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马