二十七、Java基础之数组的排列

/*
一、冒泡排序:
int类型的数组:3,1,5,2,6
*/

public class Test01 {

    public static void main(String[] args){
        int[] a={3,1,5,2,6,4};

        //开始排序
        for(int i=a.length-1;i>0;i--){
            //System.out.println("i="+i);
            for(int j=0;j<i;j++){
                //System.out.println("j="+j);
                if(a[j]>a[j+1]){
                    int temp;
                    temp=a[j];
                    a[j]=a[j+1];
                    a[j+1]=temp;


                }

            }

        }
        //遍历
        for(int i=0;i<a.length;i++){System.out.println(a[i]);}


    }
}

/*
分析:
1.原数据:
3,1,5,2,6,4
第一次循环:6
1,3,5,2,6,4
1,3,5,2,6,4
1,3,2,5,6,4
1,3,2,5,6,4
1,3,2,5,4,6

1,3,2,5,4
第二次循环:5
1,3,2,5,4
1,2,3,5,4
1,2,3,5,4
1,2,3,4,5

1,2,3,4
第三次循环:4
1,2,3,4
1,2,3,4
1,2,3,4

1,2,3
第四次循环:3
1,2,3
1,2,3

第五次循环:2
1,2

 */
二、选择排序:
// 3 1 6 2 5
//算法:找出最小值,然后这个最小值和最前面的数据交换位置

public class Test02 {

    public static void main(String[] args){

        int[] a={3,1,6,2,5};

        //选择排序
        for(int i=0;i<a.length;i++){
            //System.out.print("i="+i+" ");
            //假设第一个数据是最小值
            int min=i;

            for(int j=i+1;j<a.length;j++){
                //System.out.print("j="+j+" ");
                if(a[min]>a[j]){
                    min=j;
                }
            }
            //System.out.println();
            //交换位置
            if(min !=i){
                int temp;
                temp=a[i];
                a[i]=a[min];
                a[min]=temp;
            }
        }
        for(int i=0;i<a.length;i++){
            System.out.print(a[i]);
        }

    }
}

/*
3 1 6 2 5
第一次循环:
1 3 6 2 5

3 6 2 5
第二次循环:
2 6 3 5

6 3 5
第三次循环:
3 6 5

6 5
第四次循环:
5 6

1----4
2----3
3----2
4----1
 */
/*
三、二分法查找:
二分法查找是建立在已经排序的基础之上的。
2.以下程序分析从小到大排序
3.这个数组中没有重复的元素

1 3 5 9 11 13 56
以上是一个已经排好序的int类型的数组,要求快速找出
13这个元素的下标

1 3 5 9 11 13 56

int begin=0
int end=6
int mid=3
中间元素是9,9<13

begin=mid+1
end=6
mid=5
*/
public class Test03 {

    public static void main(String[] args){

        int[] a={1,3,4,5,7,8,9,10,23,25,29};

        int descelement=101;
        //要求从a数组汇总查找10这个元素的下标
        int index=binarySearch(a,descelement);//如果找到则返回元素的下标,如果找不到统一返回-1

        System.out.println((index==-1)?descelement+"不存在":descelement+"在这个数组的下标为"+index);


    }

    public static int binarySearch(int[] a,int descelement) {
        int begin = 0;
        int end = a.length - 1;


        while (begin<=end) {
            int mid = (begin + end) / 2;
            if (a[mid] == descelement) {
                return mid;
            } else if (a[mid] < descelement) {
                begin = mid + 1;

            } else if (a[mid] > descelement) {
                end = mid - 1;
            }
        }
        return -1;
    }
}

四、SUN提供的工具

import java.util.Arrays;

public class Test04 {
    public static void main(String[] args){

        int[] a={3,1,5,2,6,4};
        //排序
        Arrays.sort(a);
        //输出
        for(int i=0;i<a.length;i++){
            System.out.println(a[i]);
        }

        //对排序之后的数据进行二分法查找
        int index=Arrays.binarySearch(a,5);
        System.out.println(index);
    }
}

 

posted @ 2018-12-23 18:49  旅行没有终点  阅读(179)  评论(0编辑  收藏  举报