Java实现数组排序
选择排序法
算法原理
首先原数组(未按顺序)如下(第一行表示对应位置存储的数据,第二行是其对应数据的索引值)
选择排序法即是先将第一个数据分别与右侧其他数据依次比较,当第一个数据较大时,对调两数据位置,最终第一个位置的数据将是数组元素的最小值;再对第二个数据分别与右侧其他数据依次比较,当第二个数据较大时,对调两数据位置,最终第二个位置的数据将是除第一个数据之外的数组元素的最小值。同理可以进行其他位置的比较和对调。如下:
程序代码
class test
{public static void main(String[] args){int[] Arr = new int[]{14,52,56,32,17};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]+",");elseSystem.out.println(arr[x]+"]");}}public static void swap(int[] arr, int a, int b){int temp = arr[a];arr[a] = arr[b];arr[b] = temp;}//选择排序法public static void selectSort(int[] arr){for(int x=0; x<arr.length-1; x++){for(int y=x+1; y<arr.length; y++){if(arr[x]>arr[y])swap(arr,x,y);}}}
}
但是仔细沿着过程我们会发现,有的位置上其实进行了多次对调,当数据较少时性能影响不大,但是当数据量较大的时候,这必将带来运算的缓慢,于是我们可以想办法减少对调交换位置的次数。我们可以通过另外设置两个变量,以第一个数据的比较为例,先将第一位数据存储在num中,然后将第一个下标存储在index中,接下来用num与后边值依次比较,较小者直接赋值给num存储起来并用index存储下标,直到比较结束,最终将index指代的下标对应的数组数据与第一个数据进行交换,即可使得第一位数据为数组元素的最小值。以此类推,每一轮比较结束都可以使该轮的首位元素成为右边元素的最小值,同时每一轮也只进行了一次对调,显然减少了对调交换的次数。
改进后的代码
/*
需求:对数组进行升序排序
思路:利用选择排序算法
步骤:
1.定义生成一个未排序的数组
2.打印原数组
3.排序
4.打印新数组
*/class test
{public static void main(String[] args){int[] Arr = new int[]{14,52,56,32,17};printArray(Arr);selectSort2(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]+",");elseSystem.out.println(arr[x]+"]");}}public static void swap(int[] arr, int a, int b){int temp = arr[a];arr[a] = arr[b];arr[b] = temp;}//选择排序法(改进)减少了换位次数public static void selectSort2(int[] arr){for(int x=0; x<arr.length-1; x++){int num = arr[x];int index = x;for(int y=x+1; y<arr.length; y++){if(num>arr[y]){num = arr[y];index = y ;}}if(index!=x)swap(arr,index,x);}}
}
冒泡排序法
算法原理
首先原数组(未按顺序)如下(第一行表示对应位置存储的数据,第二行是其对应数据的索引值)
冒泡排序法即是先将第一个数据与第二个元素比较,当第一个数据较大时,对调两数据位置;再对第二个数据与第三个数据比较,当第二个数据较大时,对调两数据位置;以此类推一直比较到最后一个元素,最终最后位置的数据将是数组元素的最大值。如下:
程序代码
/*
需求:对数组进行升序排序
思路:利用冒泡排序算法
步骤:
1.定义生成一个未排序的数组
2.打印原数组
3.排序
4.打印新数组
*/class Array4
{public static void main(String[] args){int[] Arr = new int[]{14,52,56,32,17};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]+",");elseSystem.out.println(arr[x]+"]");}}public static void swap(int[] arr, int a, int b){int temp = arr[a];arr[a] = arr[b];arr[b] = temp;}//冒泡排序法1public static void bubbleSort(int[] arr){for(int x=0; x<arr.length-1; x++){for(int y=0; y<arr.length-1-x;y++){if(arr[y]>arr[y+1])swap(arr,y+1,y);}}}
}
或
/*
需求:对数组进行升序排序
思路:利用冒泡排序算法
步骤:
1.定义生成一个未排序的数组
2.打印原数组
3.排序
4.打印新数组
*/
class Array4
{public static void main(String[] args){int[] Arr = new int[]{14,52,56,32,17};printArray(Arr);bubbleSort2(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]+",");elseSystem.out.println(arr[x]+"]");}}public static void swap(int[] arr, int a, int b){int temp = arr[a];arr[a] = arr[b];arr[b] = temp;}//冒泡排序法2public static void bubbleSort2(int[] arr){for(int x=arr.length-1; x>=0; x--){for(int y=0; y<x; y++){if(arr[y]>arr[y+1])swap(arr,y+1,y);}}}
}
直接调用库函数排序
以上两种排序虽然涉及到算法基础,但是在实际工程应用中,性能并不算是太好,在实际应用中,java将排序函数封装到了库中,我们一般直接调用来使用。
/*
需求:对数组进行升序排序
思路:直接导入库调用数组函数
步骤:
1.定义生成一个未排序的数组
2.打印原数组
3.排序
4.打印新数组
*/
import java.util.*;class Array4
{public static void main(String[] args){int[] Arr = new int[]{14,52,56,32,17};printArray(Arr);Arrays.sort(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]+",");elseSystem.out.println(arr[x]+"]");}}public static void swap(int[] arr, int a, int b){int temp = arr[a];arr[a] = arr[b];arr[b] = temp;}
}
Java实现数组排序相关推荐
- Java-Runoob-高级教程-实例-数组:01. Java 实例 – 数组排序及元素查找
ylbtech-Java-Runoob-高级教程-实例-数组:01. Java 实例 – 数组排序及元素查找 1.返回顶部 1. Java 实例 - 数组排序及元素查找 Java 实例 以下实例演示 ...
- java一维数组排序
Java一维数组排序 仅供参考 一维数组升序方法 public static int[] sort1(int[] arr){//升序for (int i = 0; i <arr.length ; ...
- java数组给名字排序_用Java给数组排序
public class BubbleDemo { public static void main(String[] args) { int arr[]={1,3,5,7,2,4,6,8,9}; bu ...
- java实现数组排序代码_Java使用选择排序法对数组排序实现代码
编写程序,实现将输入的字符串转换为一维数组,并使用选择排序法对数组进行排序. 思路如下: 点击"生成随机数"按钮,创建Random随机数对象: 使用JTextArea的setTex ...
- Java:数组排序输出
问题:编写一个程序,在其中建立一个有10个整数的数组,运行后从键盘输入10个数,然后排序(升序)后输出 代码: package com.company;import java.util.Scanner ...
- JAVA day04 数组排序,类和对象
数组排序 1.冒泡排序 import java.util.Arrays;//冒泡排序 public class Deom01 {public static void main(String[] arg ...
- java list数组排序_浅谈对象数组或list排序及Collections排序原理
常需要对list进行排序,小到List,大到对自定义的类进行排序.不需要自行归并或堆排序.简单实现一个接口即可. 本文先会介绍利用Collections对List进行排序,继而讲到Collection ...
- java字符串数组排序_在Java中对字符串数组进行排序
允许用户使用字符串数组.他们可以向数组添加字符串,从数组中删除字符串,搜索数组中的字符串,最终他们将能够对数组进行排序.分类是搞砸我的原因.我尝试过几种不同的方法.第一种方法是将数组转换为ArrayL ...
- java使用数组排序方法_java数组中的排序问题(冒泡排序方法的实现,及内置排序算法的应用)...
在编程过程中对数组的运用也是很关键的,我们往往需要利用到数组,其中有一点就是当涉及到数组的排序问题,我们应该如何解决? 今天我来介绍两种常用的排序方法 一,冒泡排序序法 冒泡排序的原理: 1.比较相邻 ...
- java 数组排序_用Java对数组排序
我正在尝试制作一个由10个整数组成的程序,到目前为止,它们都具有随机值. 但是,现在我需要按从最低到最高的顺序对它们进行排序,然后将其打印到屏幕上,我该怎么做呢? (对一个程序这么小的代码感到抱歉,我 ...
最新文章
- 微信服务通知消息找回_第三方平台微信服务号模板消息怎么发送
- 12种超酷HTML5 SVG和CSS3浮动标签效果
- 菏泽合村并居促土地流转-农业大健康·万祥军:集约谋定高效
- 李航《统计学习方法》之HMM隐马尔可夫模型
- body里写注释 postman_是时候扔掉 Postman 了,试试 IntelliJ IDEA 自带的高能神器!
- python括号是中文还是英文_python括号区别
- [RL] pip 安装 atari-py
- leetcode371
- double operator[](int i)_请谨慎使用float和double
- 软件构造之java类图
- 修改华为 Echolife HG8010h 的超级用户密码
- Excel精选28个实用技巧实例学习
- 我裸辞 转行软件测试 然而没有人要我
- 工作三年的Java程序员该如何规划后续的职业发展?
- 微信小程序weui-form表单的使用
- win10声音显示红叉问题解决
- 用IDEA新建一个工程项目并编写HelloWorld
- Mysql引擎的知识
- 滤波器基础03——Sallen-Key滤波器、多反馈滤波器与Bainter陷波器
- 浅谈华为EROFS文件系统的两个主要技术
热门文章
- ax200蓝牙驱动linux,AX200蓝牙驱动
- 2023中兴笔试复盘
- C# BackgroundWorker使用讲解
- Android 系统源码以及结构
- 矢量 路网 免费下载_50个免费矢量图片下载网站
- 新路由3鸡血版固件_NEWIFI3老毛子鸡血驱动版固件
- TimesTen Classic 18c 卸载 (uninstall)全过程
- 照明灯智能控制器c语言编程,基于51单片机的智能照明灯控制系统设计(含电路图,原理图,程序)...
- 交互设计沉思录:顶尖设计专家Jon Kolko的经验与心得(原书第2版)
- 宏基4752g linux驱动下载,宏基4752g显卡驱动