博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数组排序的四种方法
阅读量:3917 次
发布时间:2019-05-23

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

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

一)通过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[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[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

运行结果:

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

转载地址:http://sbirn.baihongyu.com/

你可能感兴趣的文章
浅析 EF Core 5 中的 DbContextFactory
查看>>
听说容器正在吃掉整个软件世界?
查看>>
使用WebBenchmark对webapi进行管理和性能测试
查看>>
持续交付三:动手自动化“开发”—>“测试”
查看>>
WebBenchmark动态测试Webapi
查看>>
Windows 7 安装 .NET 5 / .NET Core 3.1 环境的方法和依赖文件
查看>>
接口幂等设计探索实践
查看>>
微服务很香--麻辣味,但要慢慢消化
查看>>
asp.net core 使用 TestServer 来做集成测试
查看>>
解锁环境变量在云原生应用中的各种姿势
查看>>
分享我的写作经验
查看>>
Azure 静态 web 应用集成 Azure 函数 API
查看>>
关于.NET5在IIS中部署的几个问题总结
查看>>
Wifi6网络
查看>>
真实经历:整整一年了,他是这样从程序员转型做产品经理的
查看>>
互联网时代供应链
查看>>
WPF 使用 Expression Design 画图导出及使用 Path 画图
查看>>
使用BeetleX访问redis服务
查看>>
.NET 应用如何优雅的做功能开关(Feature Flag)
查看>>
如何踢掉 sql 语句中的尾巴,我用 C# 苦思了五种办法
查看>>