博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数组排序_冒泡排序、选择排序、快速排序
阅读量:5904 次
发布时间:2019-06-19

本文共 1784 字,大约阅读时间需要 5 分钟。

hot3.png

 1.冒泡法排序:

思想:

  每一次排序,都是将两个相邻的数进行比较,将大的数移动的右边。

  将会将最在原数放到最后。

 

    public void test1() {

        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++) {

            // 每一次计算时,最后一个数不在循环内,且已经比较过的最后的数,不参与再次比较

            for (int j = 0; j < a.length - 1 - i ; 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的位置。

 

   

    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

   

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

        }

}

 

转载于:https://my.oschina.net/u/2354614/blog/540660

你可能感兴趣的文章
kvm-1
查看>>
leetcode 64. Minimum Path Sum
查看>>
textkit
查看>>
CentOS7+CDH5.14.0安装CDH错误排查: HiveServer2 该角色的进程已退出。该角色的预期状态为已启动...
查看>>
The Oregon Trail 俄勒冈之旅
查看>>
Excel VBA连接MySql 数据库获取数据
查看>>
Developing a Service Provider using Java API(Service Provider Interface)(转)
查看>>
oschina程序开发
查看>>
nested exception is java.lang.NoClassDefFoundError: net/sf/cglib/proxy/CallbackFilter
查看>>
“正在注册字体”问题解决
查看>>
windows10 更新后要输入2次密码才能进入系统
查看>>
iOS开发-OpenGL ES入门教程1
查看>>
平衡二叉树(AVL树)
查看>>
面向对象思想(第一天)
查看>>
微信小程序 js逻辑
查看>>
linux 安装 sftp
查看>>
openStack queens
查看>>
(转)EOSIO开发(四)- nodeos、keosd与cleos
查看>>
MVC5+EF6 入门完整教程八
查看>>
Java 设计模式专栏
查看>>