数组排序_冒泡排序、选择排序、快速排序

 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);

        }

}