java - 基础 - 排序

冒泡排序

    //冒泡排序, type = 0 则从小到大, type = 1则从大到小
    //遍历一遍如果后面的比前面的小(大),则两者交换,遍历length-1遍
    public void bubbleSort(int a[], int type){
        for(int i = 0; i < a.length - 1; i++) {
            for (int j = 0; j < a.length - 1; j++) {
                if ( (a[j] > a[j + 1] && type==0) || (a[j] < a[j + 1] && type == 1) ){
                    int n = a[j];
                    a[j] = a[j + 1];
                    a[j + 1] = n;
                }
                //showArray(a);
            }
        }
    }

 

 

 

 选择排序

    //选择排序, type = 0 则从小到大, type = 1则从大到小
    //遍历一遍选出前i个中最小(大)的和a[i-1]交换。i从length到1;
    public void selectionSort(int a[], int type){
        for(int i = a.length-1; i >= 0; i--) {
            int flag = 0;
            for (int j = 0; j <= i; j++) {
                if ( (a[flag] > a[j] && type==0) || (a[flag] < a[j] && type == 1) ){
                    flag = j;
                }
                //showArray(a);
            }
            int n = a[i];
            a[i] = a[flag];
            a[flag] = n;
        }
    }

 

插入排序

    //插入排序, type = 0 则从小到大, type = 1则从大到小
    //从第i个数字开始(i之前的数字都已经排序完毕),如果第i个数字比它前面的大(小),则说明前i个数字没有排好顺序(第i个数字的位置不对),则把第i个数字记录下来,往前遍历,找到合适的位置插入,依次从第2个数字检查到第length个数字。
    public void insertionSort(int a[], int type){
        for(int i = 1; i < a.length; i++){
            int current = a[i];
            int j = i;
            while( (j>0 && current < a[j-1] && type == 0) || (j>0 && current > a[j-1] && type == 1) ) {//当current比a[j-1]数字小(大)时,说明current应该在这个数字之前,则把这个数字往后挪一格。
                a[j] = a[j-1];
                j--;
            }
            a[j] = current; //当循环结束时,说明目前a[j]之前的数字比current小(大),所以current存在a[j]。
        }
    }

 

希尔排序

    //希尔排序
    public void shellSort(int[] a){
        //可以理解为把数组根据跨度分成很多数组进行插入排序,不断缩小跨度最后统一。

        for(int gap = a.length/2; gap > 0; gap = gap/2){  //间距从length/2开始一直减到0(其实应该是1,但是考虑到java整除问题所以才设为0)
            //然后开始把每隔gap个的数字为一组进行插入排序 (其实就是把插入排序里面的减1全变成减gap- -)
            for(int i = gap; i < a.length; i++){
                int current = a[i];
                int j = i;
                while( j - gap >= 0 && current < a[j - gap] ){
                    a[j] = a[j - gap];
                    j = j - gap;
                }
                a[j] = current;
            }
        }
    }

 

快速排序

https://www.cnblogs.com/clamp7724/p/11842603.html

 

桶排序

https://www.cnblogs.com/clamp7724/p/11852406.html

 

二叉排序树

https://www.cnblogs.com/clamp7724/p/11861860.html

 

当然了- -平时做题的时候排序一般直接用工具类:

int[] a;
Arrays.sort(a);

 

posted @ 2019-09-26 12:41  不咬人的兔子  阅读(169)  评论(0编辑  收藏  举报