• 冒泡排序、选择排序和插入


    冒泡排序、选择排序和插入排序代码如下:

    复制代码
    package cn.luxh.app.test;
    
    public class SimpleSortUtil {
        
        /**
         * 冒泡排序
         * 从小到大排序
         * 思路:
         * 1)第一趟排序进行了len-1次比较,数组中的最大值元素排到了最末端,位置已固定,该元素不再参与下趟比较
         * 2)第二趟排序进行了len-2次比较,因为只需要比较到第一个位置固定的元素(第一趟排序中的最大值元素)即可,数组中的第二大值元素位置也已固定,该元素不再参与下趟比较
         * 3)第三趟排序进行了len-3次比较,因为只需要比较到第一个位置固定的元素(第二趟排序中的最大值元素)即可,数组中的第三大值元素位置也已固定,该元素不再参与下趟比较
         * 4)依次类推...
         * 
         * @param array
         * @return
         */
        public static int[] bubbleSort(int[] array) {
            int out;//外层循环计数
            int in;//内层循环计数
            int len = array.length;
            
             //1)外层for循环计数器out从数组的最后开始,即out等于len-1,每经过一次循环,out减1(往左移);
             //2)下标大于out的元素都是已经排好序的了;
             //3)内层for循环计数器in从数组的最开始算起,即in=0,每完成一次内部循环加1,当in等于out时结束一次循环。
             //4)在内层循环中,比较in和in+1的两个元素
            for(out=len-1;out>1;out--) {
                //下标大于out的元素都是已经排好序的,不用再处理。
                for(in=0;in<out;in++) {
                    if(array[in]>array[in+1]) {
                        //当前元素值比后面的元素值大,则交换两个元素的位置
                        int temp = array[in];
                        array[in] = array[in+1];
                        array[in+1] = temp;
                    }
                }
            }
            return array;
        }
        
        
        /**
         * 选择排序
         * 从小到大排序
         * 思路:
         * 1)第一趟比较时,找到最小的元素,然后这个最小元素和数组最左边(下标为0)的元素交换位置,这个最小值不再参与下次比较
         * 2)第二趟比较时,从下标为1的元素开始,找到最小的元素,然后把这个最小值元素和下标为1的元素交换位置,这个最小元素不再参与下次比较
         * 3)依次类推...
         * @param array
         * @return
         */
        public static int[] selectionSort(int[] array) {
            int min;//最小值下标
            int in;//内层循环计数
            int out;//外层循环计数
            int len = array.length;
            
            
            for(out=0;out<len-1;out++) {
                min = out;//最小值下标初始化
                for(in=out+1;in<len;in++) {
                    //如果有元素比array[min]小,则把下标赋给min
                    if(array[in]<array[min]) {
                        min = in;
                    }
                }
                //内层循环每结束一次,就把找到的最小元素和外层循环开始的元素交换
                int temp = array[out];
                array[out] = array[min];
                array[min] = temp;
            }
            return array;
        }
        
        /**
         * 插入排序
         * 从小到大
         * 在外层的for循环中,out计数器从1开始,向右移动,它标记了未排序部分的最左端的数据;
         * 在内层的while循环中,in计数器从out开始,向左移动,直到temp变量(标志位)的值小于in所指的数组值和in不能再向左移动为止
         * while循环的每一趟都向右移动了一个已排序的元素
         * 
         * 
         * @param array
         * @return
         */
        public static int[] insertSort(int[] array) {
            int in;//内层循环计数
            int out;//外层循环计数
            int len = array.length;
            for(out=1;out<len;out++) {
                //移出标志位值
                int temp = array[out];
                in = out;
                while(in>0 && array[in-1] >=temp) {
                    //大于标志位的值,则右移
                    array[in] = array[in-1];
                    in--;//左移计数器
                }
                //插入标志为值
                array[in] = temp;
            }
            return array;
        }
        
    }
    复制代码

    测试:

    复制代码
    package cn.luxh.app.test;
    
    import org.junit.Test;
    
    public class SimpleSortTester {
        
        @Test
        public void testSort() {
            int[] array = {6,45,35,23,78,34,26,67,38,90,345,2345,12,3568,80,100};
            //SimpleSortUtil.bubbleSort(array);
            //SimpleSortUtil.selectionSort(array);
            SimpleSortUtil.insertSort(array);
            displayArray(array);
        }
        
        public void displayArray(int[] array) {
            for(int a:array) {
                System.out.println(a);
            }
        }
        
    }
    复制代码
  • 相关阅读:
    从0系统学Android-2.6Activity间数据传递
    观察者模式详解
    从0系统学Android-2.5更多隐式Intent用法
    从 View 的四个构造方法说起
    ListView详细介绍与使用
    推荐一个程序员系统学习网址
    从 http协议角度解析okhttp
    从0系统学Android-2.4隐式Intent
    菜单布局记录篇
    轮播图记录篇
  • 原文地址:https://www.cnblogs.com/zhoushengbing/p/3199713.html
Copyright © 2020-2023  润新知