数组排序的四种方法

18 篇文章 0 订阅

在程序设计中,经常需要将一组数列进行排序,这样更加方便与统计与查询。这篇博客,我就来介绍几种关于数组排序的方法。

一)通过Arrays类的静态sort()方法,实现对数组进行排序,sort()方法提供了多种重载形式,可对任意类型的数组进行升序排序。

语法如下:

Arrays.sort(object)     //其中,object是指进行排序的数组名称。

算法实例:

import java.util.Arrays;        //导入java.util.Arrays类

public class Demo1 {
    public static void main(String[] args) {
        int arr[]=new int[]{5,25,1,77};
        Arrays.sort(arr);       //运用sort()方法进行排序
        for(int i=0 ; i<4 ; i++){ //循环遍历排序后的数组
            System.out.print(arr[i]+" "); //将排序后的数组的各个元素进行输出
        }
    }
}

运行结果:

上述实例是对整形数据进行排序,Java中的String类型数组的排序算法,是根据字典编排顺序排序的,因此数字排在字母前边,大写字母排在小写字母前面。

 二)冒泡排序:这是广大学习者最先接触的一种排序算法,它排序数组元素的过程总是将小数往前放、大数往后放,类似于水中气泡往上升的动作,所以称冒泡排序。

基本思想:冒泡排序的基本思想是对比相邻的元素值,如果满足条件就交换元素值,把较小的元素移动到数组前面,把大的元素移动到数组后面(也就是交换两个元素的位置),这样较小的元素就像气泡一样从底部上升到顶部。

算法实例:

public class Demo2 {
    public static void main(String[] args) {
        int array[]={55,88,78,12,3,1};
        Demo2 demo2=new Demo2();
        demo2.sort(array);   //调用后面的排序方法将数组进行排序
    }
    /**
     * 冒泡排序
     * 
     * @param array
     *          要排序的数组
     */
    public void sort(int[] array){
        for(int i=1 ; i<array.length;i++){
            //比较两个相邻的元素,较大的数往冒泡
            for(int j=0;j<array.length-i;j++){
                if(array[j]>array[j+1]){
                    int temp=array[j];   //第一个元素存于临时变量temp中
                    array[j]=array[j+1]; //第二个元素保存在第一个元素单元中
                    array[j+1]=temp;  //把临时变量(也就是第一个元素原值)保存在第二个元素单元
                }
            }
        }
        showArray(array);    //输出冒泡排序后的数组
    }
    /**
     * 显示数组胡所有元素
     * 
     * @param  array
     *          要显示的数组
     */
    public void showArray(int[] array){
        for(int i:array){                    //遍历数组
            System.out.print(">"+i);         //输出每个数组的元素值
        }
        System.out.println();
    }
}

运行结果:

冒泡排序的主要思想就是:把相邻两个元素进行比较,如满足一定条件则进行交换(如判断大小或日期前后等),每次循环都将最大(或最小)的元素排在最后,下一次循环是对数组中其他元素进行类似操作。

三)直接选择排序:直接选择排序属于选择排序的一种,它的排序速度要比冒泡排序快一些,也是常用的排序算法。

基本思想:将指定排序位置与其他数组元素分别对比,如果满足条件就交换元素值,注意这里区别冒泡排序,不是交换相邻元素,而是把满足条件的元素与指定的排序位置交换。

算法实例:

/**
 * 直接选择排序算法实例
 */

public class Demo2 {
    public static void main(String[] args) {
        int array[]={22,45,85,1,2,0,32};
        Demo2 demo2=new Demo2();
        demo2.sort(array);  //调用后面的排序方法
    }
    /**
     * 直接选择排序
     * 
     * @param array
     *          要排序的数组
     */
    public void sort(int[] array){
        int index;
        for(int i=1 ; i<array.length;i++){
            index=0;
            for(int j=0;j<array.length-i;j++){
                if(array[j]>array[index]){
                    index=j;  //找出本次循环数组中最大的元素的位置
                }
            }
            //交换在位置array.length-i和index(最大值)上的两个元素
            int temp=array[array.length-i];
            array[array.length-i]=array[index];
            array[index]=temp;
        }
        showArray(array);
    }
    /**
     * 显示数组胡所有元素
     * 
     * @param  array
     *          要显示的数组
     */
    public void showArray(int[] array){
        for(int i:array){
            System.out.print(">"+i);
        }
        System.out.println();
    }
}

运行结果:

将直接选择排序算法与冒泡排序算法相比较,我们可以看出,冒泡排序是交换满足条件的相邻元素值,而直接选择排序则是先找大最大(或最小)元素值的位置,然后与相应位置的元素进行交换。

四)反转排序:顾名思义,反转排序就是以相反的顺序把原数组的内容进行重新排序。

基本思想:把数组最后一个元素与第一个元素进行替换,倒数第二个与第二个元素进行替换,以此类推,直到把所有元素反转替换。

算法实例:

/**
 * 反转排序算法实例
 */

public class Demo2 {
    public static void main(String[] args) {
        int array[]={1,2,3,4,5,6,7,8,9,10};
        Demo2 demo2=new Demo2();
        demo2.sort(array);
    }
    /**
     * 反转排序
     * 
     * @param array
     *          要排序的数组
     */
    public void sort(int[] array){
        System.out.println("数组原有内容:" );
        showArray(array);
        int temp;
        int len=array.length;
        for(int i=0; i<len/2;i++){
           temp=array[i];
           array[i]=array[len-1-i];
           array[len-1-i]=temp;
        }
        System.out.println("数组反转后内容:");
        showArray(array);
    }
    /**
     * 显示数组胡所有元素
     * 
     * @param  array
     *          要显示的数组
     */
    public void showArray(int[] array){
        for(int i:array){
            System.out.print("\t"+i);
        }
        System.out.println();
    }
}

运行结果:

最后,需要注意的是,数组的下标都是从0开始的,最后一个元素的表示总是“数组名.length-1”。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值