數組排序_冒泡排序、選擇排序、快速排序

 1.冒泡法排序:算法

思想:spa

  每一次排序,都是將兩個相鄰的數進行比較,將大的數移動的右邊。.net

  將會將最在原數放到最後。排序

 

@Test get

    public void test1() {class

        int[] a = { 4, 7, -923, 3, 4, 5, 5, 6, 7, 7, 4, 2, 2, 4, 4, 56, 546, 7, 678, 678, 89, 57, 45, 234, 234, 34, -90,test

                5, 676, 7, 2, 0, 5 };變量

        for (int i = 0; i < a.length; i++) {循環

            // 每一次計算時,最後一個數不在循環內,且已經比較過的最後的數,不參與再次比較bug

            for (int j = 0; j < a.length - 1 - i[H1] ; j++) {

                if (a[j] > a[j + 1]) {

                    int tem = a[j + 1];// 設置臨時變量

                    a[j + 1] = a[j];

                    a[j] = tem;

                    print(a);

                    System.err.println();

                }

            }

        }

   

 

2.選擇法排序:

   第一次選擇一個最小的數,放到前前面下標便是0

   第二次選擇一個次的數放到下標爲1的位置。

 

    @Test

    public void test() {

        int[] a = { 4, 7, -923, 3, 4, 5, 5, 6, 7, 7, 4, 2, 2, 4, 4, 56, 546, 7, 678, 678, 89, 57, 45, 234, 234, 34, -90,

                5, 676, 7, 2, 0, 5 };

        for (int i = 0; i < a.length; i++) {

            // 聲明最小的數

            int small = a[i];

            // 聲明一個更小的數的下標的位置

            int index = -1;

            for (int j = i + 1; j < a.length; j++) {

                if (small > a[j]) {

                    small = a[j];// 設置更小的數是a[j]

                    index = j;// 記錄下標

                }

            }

            // 判斷是否找到了更小的數

            if (index != -1) {

                // 交換位置

                a[index] = a[i];

                a[i] = small;

            }

        }

        print(a);

    }

 

3.快速排序

 

思想:

   二分法。取出任意的一個數[下標爲0的數]認爲它的中間數。將所小於這個數的數,放到左邊,將大於這個數的數放到右邊。

   再分另比較中間這個數的兩邊的數據。

 

排序算法:

   4  2   7  0   5

第一次排序:

   0  2   4  7   5

 

第二次排序:

   0   2   4   7  5

第三次排序:

   0    2  4   5  7

    @Test

    public void test3() {

        int[] a = { -90, 5, 676, 7, 2, 0, 5 };

        sort(a, 0, a.length - 1);

    }

 

    public void sort(int[] a, int from, int to) {

        int left = from;

        int right = to;

        int mid = a[left];

        while (left < right) {// 若是左邊的下標還小於右邊的下標的話,就能夠進行比較

            // 先從右向左找從mid小的

            for (int i = right; i > left; i--, right--) {

                if (a[i] < mid) {

                    a[left] = a[i];

                    a[i] = mid;

                    break;

                }

            }

            // 再從左向右比較找比mid大的

            for (int i = left; i < right; i++, left++) {

                if (a[i] > mid) {

                    a[right] = a[i];

                    a[i] = mid;

                    break;

                }

            }

        }

        print(a);

        // 若是開始的下標小於結束下標纔有必要比較

        if (from < left - 1) {

            sort(a, from, left - 1);

        }

        if (right + 1 < to) {

            sort(a, right + 1, to);

        }

}

相關文章
相關標籤/搜索