java 三大排序方法

排序方法是经常用到的java基本知识。下边把基本的三大方法保存到这里,以作记录。

public class Sort {
    private static void swap(int[] arr,int index1,int index2){
        int temp = arr[index1];
        arr[index1] = arr[index2];
        arr[index2] = temp;
    }



    public static void main(String[] args) {
        int[] arr = {5,9,3,6,2,4,9,5,8,1};
        quickSort(arr,0,arr.length-1);
        logArr(arr);
//        swap(arr,0,1);
//        System.out.println(arr[0]+","+arr[1]);
//        swap2(arr, 0, 1);
//        System.out.println(arr[0]+","+arr[1]);
    }

    public static void logArr(int[] arr){
        for (int i : arr) {
            System.out.print(i+"");
        }
    }

    //选择排序法
    public static void selector(int[] arr){

        for (int i = 0; i <arr.length-1 ; i++) {
            for (int j = i; j <arr.length ; j++) {
                //逐一比较,把比他小的都换到前边来,从小到大
                if(arr[i]>arr[j]){
                    swap(arr,i,j);
                }
            }
        }
    }



    //冒泡排序法
    public static void bubbleSort(int[] arr){

        for (int i = 0; i < arr.length-1; i++) {
            for (int j = 0; j < arr.length-1; j++) {
                if (arr[j] > arr[j + 1]) {
                    swap(arr,j,j+1);
                }
            }
        }
    }


    public static void quickSort(int[] arr,int low,int high){
        int h = quick(arr, low, high);
        if(h>low){
            quickSort(arr,low,h-1);
        }
        if(h<high){
            quickSort(arr,h+1,high);
        }

    }

    public static int  quick(int[] arr, int low, int high) {
        int l = low;
        int h = high;

        int temp = arr[low];

        while (true) {
            //从右到左,逐个和标准比较,直到发现比标准小的,保留位置
            while(temp<=arr[h]){

                if(h==low){
                    break;
                }

                h--;
            }
            //从左到右,逐个和标准比较,直到发现比标准大的,保留位置
            while(temp>=arr[l]){

                if (l == high) {
                    break;
                }
                l++;
            }

            //如果相交,说明左边的全小,右边的全大,跳出循环
            if (l >= h) {
                break;
            }
            //交换不符合条件的两个数
            swap(arr,l,h);
        }
        //校验标准值,重新定义标准下标
        swap(arr,low,h);

        return h;
//        if(h>low){
//
//            quick(arr, low, h-1);
//        }if(h<high){
//
//            quick(arr,h+1,high);
//        }

    }

猜你喜欢

转载自blog.csdn.net/YuGuHan/article/details/80658685
今日推荐