排序

冒泡排序:java

package cn.edu.hdu.chenpi.plib;

import java.util.Arrays;

public class App {

    public static void main(String[] args) {
        Integer[] arr = { 49, 38, 65, 97, 76, 13, 27, 49 };

        for (int i = 0; i < arr.length - 1; i++) {
            //用於提早結束判斷
            boolean changeFlag = false;
            for (int j = 0; j < arr.length - i - 1; j++) {
                if (arr[j] > arr[j + 1]) {
                    int tmp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = tmp;
                    changeFlag = true;
                }
            }
            if (changeFlag == false)
                break;
            System.out.println("第" + (i + 1) + "次:" + Arrays.asList(arr));
        }
        System.out.println(Arrays.asList(arr));
        ;
    }
}

快速排序:ui

package cn.edu.hdu.chenpi.plib;

public class App {

    public static void main(String[] args) {
        int[] arr = { 49, 38, 65, 97, 76, 13, 27, 49 };
        App.quickSort(arr, 0, arr.length - 1);
        for (int t : arr) {
            System.out.println(t);
        }
    }

    public static int trip(int[] arr, int begin, int end) {
        int c = arr[begin];
        int i = begin, j = end;
        //最後一個空位
        int index = 0;
        while (i < j) {
            //從後往前找
            while (i < j && arr[j] >= c) {
                j--;
            }
            arr[i] = arr[j];
            index = j;
            i++;

            if (i >= j) break;
            
            //從前日後找
            while (i < j && arr[i] <= c) {
                i++;
            }
            arr[j] = arr[i];
            index = i;
            j--;

        }

        arr[index] = c;

        //打印一趟排序後的結果
        for (int t : arr) {
            System.out.print(t + " ");
        }
        System.out.println(index);
        return index;
    }

    public static void quickSort(int[] arr, int begin, int end) {
        if (begin < end) {
            int middle = App.trip(arr, begin, end);

            App.quickSort(arr, begin, middle - 1);
            App.quickSort(arr, middle + 1, end);
        }
    }
}

選擇排序:在要排序的一組數中,選出最小的一個數與第一個位置的數交換;而後在剩下的數當中再找最小的與第二個位置的數交換,如此循環到倒數第二個數和最後一個數比較爲止。spa

插入排序:已排序+未排序兩部分,從已排序後面找一個值,插入到已排序,依次下去。。。code

希爾排序:blog

歸併排序:歸併(Merge)排序法是將兩個(或兩個以上)有序表合併成一個新的有序表,即把待排序序列分爲若干個子序列,每一個子序列是有序的。而後再把有序子序列合併爲總體有序序列。排序

堆排序:ip

 

  n個元素的序列{k1,k2,…,kn}當且僅當知足下列關係之一時,稱之爲堆。io

  情形1:ki <= k2i 且ki <= k2i+1 最小化堆小頂堆class

  情形2:ki >= k2i 且ki >= k2i+1化堆大頂堆import

若在輸出堆頂的最小值以後,使得剩餘n-1個元素的序列重又建成一個堆,則獲得n個元素的次小值。如此反覆執行,便能獲得一個有序序列,這個過程稱之爲堆排序

 

相關文章
相關標籤/搜索