Java小结(四)——折半查找、选择排序、冒泡排序

最常见的一些基本算法,比如折半查找,选择排序,冒泡排序。
折半查找,是它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列     即数组内元素必须是有序的才可以用折半查找的办法。

 //折半查找
    public static int halfSearch(int arr[],int key){
        int min,mid,max;
        min=0;
        max=arr.length-1;
       
        while(min<=max)//在min不大于max这个条件下,不断的折半查找
        {
            mid=(min+max)/2;

            if(arr[mid]>key)
                max=mid-1;
            else if (arr[mid]<key) 
                min=mid+1;
            else
                return mid;
        }
        return -1;
    }

选择排序,是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。就相当于,军训时候排队,教练从队中选择最小的放在前面,第二小的放在第二位,以此类推。

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;
                }
            }
        }
    }

冒泡排序,重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。就想一块石头最终会沉下去,而最轻的会冒泡上来,也就是每次排序都会至少确定一个数的位置是最终位置。

public static void BubbleSort(int[] arr){
    int flag=0;//设定标志,如果第一次循环比较时没有发生交换,说明数组是升序排序,不用比较排序,提交结束循环。
    for (int x=0;x<arr.length-1 ;++x ) {
        for (int y=0;y<arr.length-x-1 ;y++ ) {
            if(arr[y]>arr[y+1]){
                    int temp=arr[y];
                    arr[y]=arr[y+1];
                    arr[y+1]=temp;
                    flag=1;
                }
        }
    if (flag==0) {
        System.out.println("No Sort");
        break;
    }

    }
}

此外,还有其他的一些排序算法,大家都可以再了解下,像快速排序,希尔排序,归并排序等。每种排序算法都有其优缺点。

猜你喜欢

转载自blog.csdn.net/qq_28640763/article/details/79195531