排序算法

来源:互联网 发布:奥鹏网络研修总结作业 编辑:程序博客网 时间:2024/04/30 04:38

1.交换排序

冒泡排序

package 排序算法;import java.util.Arrays;public class 冒泡排序算法 {    public static void main(String[] args) {        int[] a = { -10, 21, 20, 38, 27, 1, 3, 6, 3, 1 };        System.out.println(Arrays.toString(a));        bubbleSort(a);        System.out.println(Arrays.toString(a));    }    public static void bubbleSort(int[] a) {        for (int i = 0; i < a.length; i++) {            for (int j = i + 1; j < a.length; j++) {                if (a[i] > a[j]) {                    a[i] = a[i] ^ a[j];                    a[j] = a[i] ^ a[j];                    a[i] = a[i] ^ a[j];                }            }        }    }}

快速排序1

package 排序算法;import java.util.Arrays;public class 快速排序算法 {    public static void main(String[] args) {        int[] a = { 5, 6, 4, 6, 3, 5, 2, 7, 1 };        System.out.println(Arrays.toString(a));        quickSort(a);        System.out.println(Arrays.toString(a));    }    public static int partition(int[] a, int l, int r) {        int i = l, j = r, x = a[l];        while (i < j) {            while (i < j && a[j] > x)                j--;            if (i < j)                a[i++] = a[j];            while (i < j && a[i] < x)                i++;            if (i < j)                a[j--] = a[i];        }        a[i] = x;        return i;    }    public static void quick_sort(int[] a, int l, int r) {        if (l < r) {            int i = partition(a, l, r);            quick_sort(a, l, i - 1);            quick_sort(a, i + 1, r);        }    }    public static void quickSort(int[] a) {        if (a.length > 0)            quick_sort(a, 0, a.length - 1);    }}

快速排序2

package 排序算法;import java.util.Arrays;public class 快速排序算法2 {    public static void main(String[] args) {        int[] a = { 5, 6, 4, 1, 6, 3, 5, 2, 7, 1 };        System.out.println(Arrays.toString(a));        quickSort(a);        System.out.println(Arrays.toString(a));    }    public static void quick_sort(int[] a, int l, int r) {        int i = l, j = r;        if (l < r) {            int x = a[l];            while (i != j) {                while (i < j && a[j] > x)                    j--;                if (i < j)                    a[i++] = a[j];                while (i < j && a[i] < x)                    i++;                if (i < j)                    a[j--] = a[i];            }            a[i] = x;            quick_sort(a, l, i - 1);            quick_sort(a, i + 1, r);        }    }    public static void quickSort(int[] a) {        if (a.length > 0)            quick_sort(a, 0, a.length - 1);    }}

奇偶排序

package 排序算法;import java.util.Arrays;public class 奇偶排序算法 {    public static void main(String[] args) {        int[] a = { 9, 1, 5, 3, 4, 2, 6, 8, 7, 1, 5 };        System.out.println(Arrays.toString(a));        odd_even_sort(a);        System.out.println(Arrays.toString(a));    }    private static void odd_even_sort(int[] a) {        boolean flag = false;        while (!flag) {            // 循环结束条件            flag = true;            // 奇偶位控制            for (int odd_even = 0; odd_even < 2; odd_even++)                // 所有的奇数位||所有的偶数位                for (int i = odd_even; i < a.length - 1; i += 2)                    // 所有奇数位和邻居比较                    if (a[i] > a[i + 1]) {                        swap(a, i, i + 1);                        // 循环继续条件                        flag = false;                    }        }    }    private static void swap(int[] a, int i, int j) {        a[i] = a[i] ^ a[j];        a[j] = a[i] ^ a[j];        a[i] = a[i] ^ a[j];    }}

鸡尾酒排序

package 排序算法;import java.util.Arrays;public class 鸡尾酒排序算法 {    public static void main(String[] args) {        int[] a = { 5, 6, 4, 6, 3, 5, 2, 7, 1 };        System.out.println(Arrays.toString(a));        cooktail_sort(a);        System.out.println(Arrays.toString(a));    }    public static void cooktail_sort(int[] a) {        int l = 0, r = a.length - 1;        while (l < r) {            for (int i = l; i < r; i++) {                if (a[i] > a[i + 1])                    swap(a, i, i + 1);            }            r--;            for (int j = r; j >= l; j--) {                if (a[j] > a[j + 1])                    swap(a, j, j + 1);            }            l++;        }    }    public static void swap(int[] a, int i, int j) {        a[i] = a[i] ^ a[j];        a[j] = a[i] ^ a[j];        a[i] = a[i] ^ a[j];    }}

2.选择排序

直接选择排序

package 排序算法;import java.util.Arrays;public class 选择排序算法 {    public static void main(String[] args) {        int[] a = { 5, 6, 4, 6, 3, 5, 2, 7, 1 };        System.out.println(Arrays.toString(a));        selection_sort(a);        System.out.println(Arrays.toString(a));    }    public static void selection_sort(int[] a) {        for (int i = 0; i < a.length - 1; i++) {            int min = i;            for (int j = i + 1; j < a.length; j++) {                if (a[min] >= a[j])                    min = j;            }            if (min != i)                swap(a, min, i);        }    }    public static void swap(int[] a, int i, int j) {        a[i] = a[i] ^ a[j];        a[j] = a[i] ^ a[j];        a[i] = a[i] ^ a[j];    }}

3.插入排序

直接插入排序

package 排序算法;import java.util.Arrays;public class 直接插入排序算法 {    public static void main(String[] args) {        int[] a = { 6, 4, 7, 4, 73, 8, 23 };        System.out.println(Arrays.toString(a));        insertSort(a);        System.out.println(Arrays.toString(a));    }    public static void insertSort(int[] a) {        for (int i = 1; i < a.length; i++) {            if (a[i] < a[i - 1]) {                int x = a[i], k = i - 1;                for (int j = k; j >= 0 && a[j] > x; j--) {                    a[j + 1] = a[j];                    k--;                }                a[k + 1] = x;            }        }    }}

希尔排序1

package 排序算法;import java.util.Arrays;public class 希尔排序算法 {    public static void main(String[] args) {        int[] a = { 5, 3, 7, 3, 7, 32, 7, 4, 23, 12, 6, 8 };        System.out.println(Arrays.toString(a));        shell_sort(a);        System.out.println(Arrays.toString(a));    }    public static void shell_sort(int[] a) {        // 分组        for (int g = a.length / 2; g > 0; g /= 2) {            // 对每个组进行操作            for (int i = 0; i < g; i++) {                // 组内操作,相当于直接插入排序的外层循环                for (int j = i + g; j < a.length; j += g) {                    // 相邻的比较                    if (a[j] < a[j - g]) {                        int x = a[j];                        int k = j - g;                        while (k >= 0 && a[k] > x) {                            a[k + g] = a[k];                            k -= g;                        }                        a[k + g] = x;                    }                } // 组内操作            } // 组内        } // 分组    }}

希尔排序2

package 排序算法;import java.util.Arrays;public class 希尔排序算法2 {    public static void main(String[] args) {        int[] a = { 5, 3, 7, 3, 7, 32, 7, 4, 23, 12, 6, 8, 5, 3, 7, 3, 7 };        System.out.println(Arrays.toString(a));        shell_sort(a);        System.out.println(Arrays.toString(a));    }    public static void shell_sort(int[] a) {        for (int g = a.length / 2; g > 0; g /= 2) {            for (int j = g; j < a.length; j++) {                if (a[j] < a[j - g]) {                    int x = a[j], k = j - g;                    while (k >= 0 && a[k] > x) {                        a[k + g] = a[k];                        k -= g;                    }                    a[k + g] = x;                }            }        }    }}

希尔排序3

package 排序算法;import java.util.Arrays;public class 希尔排序算法3 {    public static void main(String[] args) {        int[] a = { 5, 3, 7, 3, 7, 32, 7, 4, 23, 12, 6, 8, 5, 3, 7, 3, 7 };        System.out.println(Arrays.toString(a));        shell_sort(a);        System.out.println(Arrays.toString(a));    }    public static void shell_sort(int[] a) {        for (int g = a.length / 2; g > 0; g /= 2)            for (int i = g; i < a.length; i++)                for (int j = i - g; j >= 0 && a[j] > a[j + g]; j -= g)                    swap(a, j, j + g);    }    public static void swap(int[] a, int i, int j) {        a[i] = a[i] ^ a[j];        a[j] = a[i] ^ a[j];        a[i] = a[i] ^ a[j];    }}

4.归并排序

数组归并

package 排序算法;import java.util.Arrays;public class 归并数组 {    public static void main(String[] args) {        int[] a = { 5, 4, 3, 2, 1 };        int[] b = { 12, 11, 10, 9, 8, 7, 6 };        int[] c = new int[12];        System.out.println(Arrays.toString(a));        System.out.println(Arrays.toString(b));        merge_array(a, b, c);        System.out.println(Arrays.toString(c));    }    private static void merge_array(int[] a, int[] b, int[] c) {        int i, j, k;        i = j = k = 0;        while (i < a.length && j < b.length) {            if (a[i] < b[j])                c[k++] = a[i++];            else                c[k++] = b[j++];        }        while (i < a.length)            c[k++] = a[i++];        while (j < b.length)            c[k++] = b[j++];    }}

归并排序

package 默写排序算法;import java.util.Arrays;public class 归并排序算法 {    public static void main(String[] args) {        int[] a = { 6, 7, 8, 5, 2, 34, 7, 3, 7, 23, 6, 2, 2 };        System.out.println(Arrays.toString(a));        merge_sort(a);        System.out.println(Arrays.toString(a));    }    private static void merge(int[] a, int l, int m, int r) {        int i = l, j = m + 1, k = 0;        int[] x = new int[r - l + 1];        while (i <= m && j <= r) {            if (a[i] <= a[j])                x[k++] = a[i++];            else                x[k++] = a[j++];        }        while (i <= m)            x[k++] = a[i++];        while (j <= r)            x[k++] = a[j++];        for (k = 0, i = l; i <= r; i++, k++)            a[i] = x[k];    }    public static void merge_gap(int[] a, int g) {        int i = 0;        for (i = 0; i + 2 * g - 1 < a.length; i += 2 * g)            merge(a, i, i + g - 1, i + 2 * g - 1);        if (i + g - 1 < a.length)            merge(a, i, i + g - 1, a.length - 1);    }    private static void merge_sort(int[] a) {        for (int g = 1; g < a.length; g *= 2)            merge_gap(a, g);    }}

5.java自带排序API

package 排序算法;import java.util.Arrays;public class Java自带的排序api {    public static void main(String[] args) {        Integer[] a = { 5, 3, 7, 3, 7, 32, 7, 4, 23, 12, 6, 8, 5, 3, 7, 3, 7 };        System.out.println(Arrays.toString(a));        Arrays.sort(a);        System.out.println(Arrays.toString(a));    }}
0 0
原创粉丝点击