直接选择排序和反转排序

package com.xxx.xxx;
/**
 * 1.直接选择排序
 * 2.反转排序
 * @author Administrator
 *
 */
public class demo11 {

    //直接选择排序
    /**
     * 直接选择排序比冒泡排序快一些
     * 基本思想:将指定排序位置与其他数组元素分别对比,满足就交换
     * (注意:这里区别冒泡排序,不是交换相邻元素,而是把满足条件的元素与指定的排序位置交换)
     * 与冒泡排序相比,直接选择排序的交换次数要少很多
     */
    public static void main(String[] args) {
        //直接选择排序
        int index;
        int[] array = {63,4,24,1,3,15};    //创建数组是乱序的

        for(int i=1;i<=array.length;i++){ //开始为 1 ,判断是 小于等于
            index = 0;
            for(int j = 1;j<= array.length-i;j++){    //开始为 1, 判断是 小于等于, 长度-1
                if(array[j] > array[index]){    // if判断
                    index = j;
                }
            }
            //交换在位置 array_sort.length-1 和 index_sort(最大值)上的两个数
            int temp = array[array.length-i]; //把第一个元素保存在临时变量中
            array[array.length-i] = array[index];    //把第二个保存在第一个
            array[index] = temp; //把临时变量(也就是第一个)保存在第二个元素中
        }
        //遍历输出
        for(int k : array){
            System.out.print(">"+k);
        }

        System.out.println("\n--------------------------");

        //2.反转排序
        /**
         * 基本思想:把数组最后一个元素与第一个元素替换,倒数第二个元素把第二个元素替换,以此类推,直到把所有数组元素反转替换
         * 反转排序是对数组两边的元素进行替换,所以只需要循环数组长度的半数次
         * 如数组长度为7,那么for循环只需循环3次
         */

        int[] a = {10,20,30,40,50,60};
        //数组反转后遍历输出
        for(int x : a){
            System.out.print(x+"\t");
        }
        System.out.println();
        int temp;
        int len = a.length;    //获取数组长度
        for(int i=0;i<len / 2 ;i++){    //根据算法,长度 除2
            temp = a[i];            //交换
            a[i] = a[len - 1 - i];
            a[len - 1 - i] = temp;
        }
        //数组反转后遍历输出
        for(int x : a){
            System.out.print(x+"\t");
        }

    }

}

 

posted @ 2014-12-15 13:06  小菜希  阅读(239)  评论(0编辑  收藏  举报