选择排序法

算法原理
首先原数组(未按顺序)如下(第一行表示对应位置存储的数据,第二行是其对应数据的索引值)

选择排序法即是先将第一个数据分别与右侧其他数据依次比较,当第一个数据较大时,对调两数据位置,最终第一个位置的数据将是数组元素的最小值;再对第二个数据分别与右侧其他数据依次比较,当第二个数据较大时,对调两数据位置,最终第二个位置的数据将是除第一个数据之外的数组元素的最小值。同理可以进行其他位置的比较和对调。如下:

程序代码

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实现数组排序相关推荐

  1. Java-Runoob-高级教程-实例-数组:01. Java 实例 – 数组排序及元素查找

    ylbtech-Java-Runoob-高级教程-实例-数组:01. Java 实例 – 数组排序及元素查找 1.返回顶部 1. Java 实例 - 数组排序及元素查找  Java 实例 以下实例演示 ...

  2. java一维数组排序

    Java一维数组排序 仅供参考 一维数组升序方法 public static int[] sort1(int[] arr){//升序for (int i = 0; i <arr.length ; ...

  3. java数组给名字排序_用Java给数组排序

    public class BubbleDemo { public static void main(String[] args) { int arr[]={1,3,5,7,2,4,6,8,9}; bu ...

  4. java实现数组排序代码_Java使用选择排序法对数组排序实现代码

    编写程序,实现将输入的字符串转换为一维数组,并使用选择排序法对数组进行排序. 思路如下: 点击"生成随机数"按钮,创建Random随机数对象: 使用JTextArea的setTex ...

  5. Java:数组排序输出

    问题:编写一个程序,在其中建立一个有10个整数的数组,运行后从键盘输入10个数,然后排序(升序)后输出 代码: package com.company;import java.util.Scanner ...

  6. JAVA day04 数组排序,类和对象

    数组排序 1.冒泡排序 import java.util.Arrays;//冒泡排序 public class Deom01 {public static void main(String[] arg ...

  7. java list数组排序_浅谈对象数组或list排序及Collections排序原理

    常需要对list进行排序,小到List,大到对自定义的类进行排序.不需要自行归并或堆排序.简单实现一个接口即可. 本文先会介绍利用Collections对List进行排序,继而讲到Collection ...

  8. java字符串数组排序_在Java中对字符串数组进行排序

    允许用户使用字符串数组.他们可以向数组添加字符串,从数组中删除字符串,搜索数组中的字符串,最终他们将能够对数组进行排序.分类是搞砸我的原因.我尝试过几种不同的方法.第一种方法是将数组转换为ArrayL ...

  9. java使用数组排序方法_java数组中的排序问题(冒泡排序方法的实现,及内置排序算法的应用)...

    在编程过程中对数组的运用也是很关键的,我们往往需要利用到数组,其中有一点就是当涉及到数组的排序问题,我们应该如何解决? 今天我来介绍两种常用的排序方法 一,冒泡排序序法 冒泡排序的原理: 1.比较相邻 ...

  10. java 数组排序_用Java对数组排序

    我正在尝试制作一个由10个整数组成的程序,到目前为止,它们都具有随机值. 但是,现在我需要按从最低到最高的顺序对它们进行排序,然后将其打印到屏幕上,我该怎么做呢? (对一个程序这么小的代码感到抱歉,我 ...

最新文章

  1. 微信服务通知消息找回_第三方平台微信服务号模板消息怎么发送
  2. 12种超酷HTML5 SVG和CSS3浮动标签效果
  3. 菏泽合村并居促土地流转-农业大健康·万祥军:集约谋定高效
  4. 李航《统计学习方法》之HMM隐马尔可夫模型
  5. body里写注释 postman_是时候扔掉 Postman 了,试试 IntelliJ IDEA 自带的高能神器!
  6. python括号是中文还是英文_python括号区别
  7. [RL] pip 安装 atari-py
  8. leetcode371
  9. double operator[](int i)_请谨慎使用float和double
  10. 软件构造之java类图
  11. 修改华为 Echolife HG8010h 的超级用户密码
  12. Excel精选28个实用技巧实例学习
  13. 我裸辞 转行软件测试 然而没有人要我
  14. 工作三年的Java程序员该如何规划后续的职业发展?
  15. 微信小程序weui-form表单的使用
  16. win10声音显示红叉问题解决
  17. 用IDEA新建一个工程项目并编写HelloWorld
  18. Mysql引擎的知识
  19. 滤波器基础03——Sallen-Key滤波器、多反馈滤波器与Bainter陷波器
  20. 浅谈华为EROFS文件系统的两个主要技术

热门文章

  1. ax200蓝牙驱动linux,AX200蓝牙驱动
  2. 2023中兴笔试复盘
  3. C# BackgroundWorker使用讲解
  4. Android 系统源码以及结构
  5. 矢量 路网 免费下载_50个免费矢量图片下载网站
  6. 新路由3鸡血版固件_NEWIFI3老毛子鸡血驱动版固件
  7. TimesTen Classic 18c 卸载 (uninstall)全过程
  8. 照明灯智能控制器c语言编程,基于51单片机的智能照明灯控制系统设计(含电路图,原理图,程序)...
  9. 交互设计沉思录:顶尖设计专家Jon Kolko的经验与心得(原书第2版)
  10. 宏基4752g linux驱动下载,宏基4752g显卡驱动