黑马程序员技术交流社区

标题: 两种排序方法 [打印本页]

作者: joe520kay    时间: 2015-7-22 23:36
标题: 两种排序方法
今天回去看了毕老师的数组视频,重新认识了下两种排序方法。基础试题有考到哦!
选择排序:
package com.joe.sortDemo;

/**
* 选择排序法
*
* @author joe 操作原理: 第一次:依次用角标0的数跟所有数比较 第二次:依次用角标1的数跟所有数比较 以此类推
*/

public class selectSortDemo {

        public static void selectSort(int[] arr) {
                for (int x = 0; x < arr.length - 1; x++) { // 开始角标为0的数
                        for (int y = x + 1; y < arr.length; y++) { // 开始角标为1的数
                                if (arr[x] > arr[y]) {
                                        // int temp = arr[x];
                                        // arr[x] = arr[y];
                                        // arr[y] = temp;
                                        swap(arr, x, y);
                                }
                        }
                }
        }

        public static void main(String[] args) {
                int[] arr = { 3, 2, 5, 1, 7, 9 };
                // 排序前
                printArray(arr);
                // 排序
                selectSort(arr);
                // 排序后
                printArray(arr);

        }

        // 打印数组的方法
        public static void printArray(int[] arr) {
                System.out.print("[");
                for (int x = 0; x < arr.length; x++) {
                        if (x != arr.length - 1) {
                                System.out.print(arr[x] + ",");
                        } else {
                                System.out.println(arr[x] + "]");
                        }
                }
        }

        /*
         * 提取换位置的相同代码,单独封装成一个函数
         */
        public static void swap(int[] arr, int a, int b) {
                int temp = arr[a];
                arr[a] = arr;
                arr = temp;
        }
}


冒泡排序:
package com.joe.sortDemo;

/**
* 冒泡排序法
*
* @author joe 相邻两个元素进行比较,如果符合条件换位
*/

public class bubbleSortDemo {

        public static void bubbleSort(int[] arr) {
                for (int x = 0; x < arr.length - 1; x++) { // 控制比较的轮数
                        for (int y = 0; y < arr.length - x - 1; y++) { // 控制每轮比较的次数
                                                                                                                        // -x让每轮比较的次数减少,-1
                                                                                                                        // 避免角标越界
                                if (arr[y] > arr[y + 1]) {
                                        // int temp = arr[y];
                                        // arr[y] = arr[y + 1];
                                        // arr[y + 1] = temp;
                                        swap(arr, y, y + 1);
                                }
                        }
                }
        }

        public static void main(String[] args) {
                int[] arr = { 3, 2, 5, 1, 7, 9 };
                // 排序前
                printArray(arr);
                // 排序
                bubbleSort(arr);
                // 排序后
                printArray(arr);

        }

        // 打印数组的方法
        public static void printArray(int[] arr) {
                System.out.print("[");
                for (int x = 0; x < arr.length; x++) {
                        if (x != arr.length - 1) {
                                System.out.print(arr[x] + ",");
                        } else {
                                System.out.println(arr[x] + "]");
                        }
                }
        }

        /*
         * 提取换位置的相同代码,单独封装成一个函数
         */
        public static void swap(int[] arr, int a, int b) {
                int temp = arr[a];
                arr[a] = arr;
                arr = temp;
        }
}



作者: 耀阳圣尊    时间: 2015-7-23 09:53
赞一赞,我一直很喜欢你的排版
作者: joe520kay    时间: 2015-7-23 11:26
耀阳圣尊 发表于 2015-7-23 09:53
赞一赞,我一直很喜欢你的排版

向你反映个问题哦,就是贴吧里如果使用代码那个功能发帖,发出来的代码排版还是乱的哦~
作者: 耀阳圣尊    时间: 2015-7-23 11:43
joe520kay 发表于 2015-7-23 11:26
向你反映个问题哦,就是贴吧里如果使用代码那个功能发帖,发出来的代码排版还是乱的哦~ ...

好的,非常感谢。我们会及时处理。
作者: joe520kay    时间: 2015-7-23 11:52
耀阳圣尊 发表于 2015-7-23 11:43
好的,非常感谢。我们会及时处理。

还有个问题想问你哦,就是那些截止日期过了但还可以回复的奖励技术分的贴,还能送分么?
作者: 耀阳圣尊    时间: 2015-7-23 14:46
joe520kay 发表于 2015-7-23 11:52
还有个问题想问你哦,就是那些截止日期过了但还可以回复的奖励技术分的贴,还能送分么? ...

http://bbs.itheima.com/thread-208318-1-1.html 你可以回复这个。或是今天下午四点参加在线答题送技术分的活动
作者: 何鹏程    时间: 2015-7-23 17:00
貌似还是乱了,交换方法里的b丢了。。。
作者: joe520kay    时间: 2015-7-23 20:55
耀阳圣尊 发表于 2015-7-23 14:46
http://bbs.itheima.com/thread-208318-1-1.html 你可以回复这个。或是今天下午四点参加在线答题送技术分 ...

额,今天刚好有事错过了
作者: gongyanfa123    时间: 2015-7-23 21:08
进来一看,排版很不错。
作者: maizi1912    时间: 2015-7-23 21:15
不错   我的博客写的也是这个
作者: zhaoyue    时间: 2015-7-23 21:21
我想问下那个运行效率会高一些啊??
作者: joe520kay    时间: 2015-7-23 21:50
zhaoyue 发表于 2015-7-23 21:21
我想问下那个运行效率会高一些啊??

差不多的 其实  你可以用系统时间来测试下




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2