sort

来源:互联网 发布:360防火墙怎么设置网络 编辑:程序博客网 时间:2024/05/17 12:46
import java.util.Arrays;public class MySort {    /**     * 假冒的排序     *     * @param data     * @return     */    public int[] fakeBuble(int[] data) {        int length = data.length;        int temp;        for (int i = 0; i < length - 1; i++) {            for (int j = i + 1; j < length; j++) {                if (data[i] > data[j]) {                    temp = data[i];                    data[i] = data[j];                    data[j] = temp;                }            }            System.out.println("the " + i + "  time is:   ");            for (int kk : data) {                System.out.print(kk + ",");            }            System.out.println();        }        return data;    }    /**     * 冒泡排序     *     * @param data     * @return     */    public int[] Buble(int[] data) {        int length = data.length;        for (int i = 0; i < length - 1; i++) {            for (int j = 0; j < length - 1 - i; j++) {                if (data[j] > data[j + 1]) {                    int temp = data[j];                    data[j] = data[j + 1];                    data[j + 1] = temp;                }            }            System.out.println("the " + i + "  time is:   ");            for (int kk : data) {                System.out.print(kk + ",");            }            System.out.println();        }        return data;    }    /**     * 选择排序     * **     *     * @param data     * @return     */    public int[] chooseSort(int[] data) {        if (data == null || data.length == 0)            return null;        int length = data.length;        for (int j = length - 1; j > 0; j--) {            int max = data[j];            int k = 0;            int maxin = data[0];            for (int i = 0; i < j; i++) {                if (data[i] >= maxin) {                    maxin = data[i];                    k = i;                }            }            if (max < data[k]) {                int change = data[k];                data[k] = data[j];                data[j] = change;            }            System.out.println("the " + j + "  time is:   ");            for (int kk : data) {                System.out.print(kk + ",");            }            System.out.println();        }        return data;    }    /**     * 插入排序     *     * @param data     * @return     */    public int[] insertSort(int[] data) {        if (data == null || data.length == 0)            return null;        int length = data.length;        for (int i = 1; i < length; i++) {            int d = data[i];            int j = i - 1;            if (d < data[j]) {                while (j >= 0 && d < data[j]) {                    data[j + 1] = data[j];                    j--;                }                data[j + 1] = d;            }        }        return data;    }    private void swap(int x, int y) {        x = x ^ y;        y = x ^ y;        x = x ^ y;    }    /**     * 快排,划范围     *     * @param data     * @param low     * @param high     * @return     */    private int partition(int[] data, int low, int high) {        int privotKey = data[low];        while (low < high) {            while (low < high && data[high] >= privotKey) {                high--;            }            data[low] = data[high];            while (low < high && data[low] <= privotKey) {                low++;            }            data[high] = data[low];        }        data[low] = privotKey;        return low;    }    /**     * 快排     *     * @param data     */    public void hurrySort(int[] data, int low, int high) {        if (low < high) {            int location = partition(data, low, high);            hurrySort(data, low, location - 1);            hurrySort(data, location + 1, high);        }    }    /**     * 堆排序     *     * @param data     */    public void heapSort(int[] data) {    }    /**     *  希尔排序     * @param data     */    public void shellsort(int[] data) {        int length = data.length;        int k = data.length / 2;        while (k != 0) {            for (int jj = 0; jj < k; jj++) {                for (int i = jj + k; i < length; ) {                    int j = i - k;                    int temp = data[i];                    if (temp < data[j]) {                        while (j >= 0 && temp <= data[j]) {                            data[j + k] = data[j];                            j = j - k;                        }                        data[j + k] = temp;                    }                    i = i + k;                }            }            System.out.println(Arrays.toString(data));            k = k / 2;        }    }    /**     * 归并排序     *     * @param data     * @param low     * @param high     */    public void mergeSort(int[] data, int low, int high) {        int mid = (low + high) / 2;        if (low < high) {            mergeSort(data, low, mid);            mergeSort(data, mid + 1, high);            merge(data, low, mid, high);        }    }    private void merge(int[] data, int low, int mid, int high) {        int[] temp = new int[high - low + 1];        int k = 0;        int i = low;        int j = mid + 1;        while (i <= mid && j <= high) {            if (data[i] < data[j]) {                temp[k++] = data[i++];            } else {                temp[k++] = data[j++];            }        }        while (i <= mid) {            temp[k++] = data[i++];        }        while (j <= high) {            temp[k++] = data[j++];        }        for (int kk = 0; kk < temp.length; kk++) {            data[kk + low] = temp[kk];        }    }    public static void main(String[] args) {        int[] data = {2, 7, 8, 3, 1, 6, 9, 0, 5, 4};        // int [] data={30,32,9,64,14,17,8};        new MySort().mergeSort(data, 0, data.length - 1);        System.out.println(Arrays.toString(data));    }}

0 0