java数据排序

java 怎么将List里面数据排序?

学生实体类,包含姓名和年龄属性,

比较时先按姓名升序排序,如果姓名相同则按年龄升序排序。

第一种:实体类自己实现比较

(实现comparable接口:public interface ComparableT ,里面就一个方法声明:public int compareTo(T o); )

然后利用List类的sort(Comparator? super E c)方法或java.util.Collections工具类的sort(ListT list) (其实里面就一句:list.sort(null); )进行排序:

结果:

第二种:借助比较器进行排序。

示例代码:

比较器java.util.Comparator类是一个接口(public interface ComparatorT ),包含int compare(T o1, T o2);等方法:

我们的比较器要实现该接口并实现compare方法:

比较的时候可以利用List的sort(Comparator? super E c)方法(或者java.util.Collections工具类的sort(ListT list, Comparator? super T c)方法)进行排序。

结果跟第一种方法一样:

请给出java几种排序方法

java常见的排序分为:

1 插入类排序

主要就是对于一个已经有序的序列中,插入一个新的记录。它包括:直接插入排序,折半插入排序和希尔排序

2 交换类排序

这类排序的核心就是每次比较都要“交换”,在每一趟排序都会两两发生一系列的“交换”排序,但是每一趟排序都会让一个记录排序到它的最终位置上。它包括:起泡排序,快速排序

3 选择类排序

每一趟排序都从一系列数据中选择一个最大或最小的记录,将它放置到第一个或最后一个为位置交换,只有在选择后才交换,比起交换类排序,减少了交换记录的时间。属于它的排序:简单选择排序,堆排序

4 归并类排序

将两个或两个以上的有序序列合并成一个新的序列

5 基数排序

主要基于多个关键字排序的。

下面针对上面所述的算法,讲解一些常用的java代码写的算法

二 插入类排序之直接插入排序

直接插入排序,一般对于已经有序的队列排序效果好。

基本思想:每趟将一个待排序的关键字按照大小插入到已经排序好的位置上。

算法思路,从后往前先找到要插入的位置,如果小于则就交换,将元素向后移动,将要插入数据插入该位置即可。时间复杂度为O(n2),空间复杂度为O(1)

package sort.algorithm;

public class DirectInsertSort {

public static void main(String[] args) {

// TODO Auto-generated method stub

int data[] = { 2, 6, 10, 3, 9, 80, 1, 16, 27, 20 };

int temp, j;

for (int i = 1; i data.length; i++) {

temp = data[i];

j = i – 1;

// 每次比较都是对于已经有序的

while (j = 0 data[j] temp) {

data[j + 1] = data[j];

j–;

}

data[j + 1] = temp;

}

// 输出排序好的数据

for (int k = 0; k data.length; k++) {

System.out.print(data[k] + ” “);

}

}

}

三 插入类排序之折半插入排序(二分法排序)

条件:在一个已经有序的队列中,插入一个新的元素

折半插入排序记录的比较次数与初始序列无关

思想:折半插入就是首先将队列中取最小位置low和最大位置high,然后算出中间位置mid

将中间位置mid与待插入的数据data进行比较,

如果mid大于data,则就表示插入的数据在mid的左边,high=mid-1;

如果mid小于data,则就表示插入的数据在mid的右边,low=mid+1

最后整体进行右移操作。

时间复杂度O(n2),空间复杂度O(1)

package sort.algorithm;

//折半插入排序

public class HalfInsertSort {

public static void main(String[] args) {

int data[] = { 2, 6, 10, 3, 9, 80, 1, 16, 27, 20 };

// 存放临时要插入的元素数据

int temp;

int low, mid, high;

for (int i = 1; i data.length; i++) {

temp = data[i];

// 在待插入排序的序号之前进行折半插入

low = 0;

high = i – 1;

while (low = high) {

mid = (low + high) / 2;

if (temp data[mid])

high = mid – 1;

else

// low=high的时候也就是找到了要插入的位置,

// 此时进入循环中,将low加1,则就是要插入的位置了

low = mid + 1;

}

// 找到了要插入的位置,从该位置一直到插入数据的位置之间数据向后移动

for (int j = i; j = low + 1; j–)

data[j] = data[j – 1];

// low已经代表了要插入的位置了

data[low] = temp;

}

for (int k = 0; k data.length; k++) {

System.out.print(data[k] + ” “);

}

}

}

四 插入类排序之希尔排序

希尔排序,也叫缩小增量排序,目的就是尽可能的减少交换次数,每一个组内最后都是有序的。

将待续按照某一种规则分为几个子序列,不断缩小规则,最后用一个直接插入排序合成

空间复杂度为O(1),时间复杂度为O(nlog2n)

算法先将要排序的一组数按某个增量d(n/2,n为要排序数的个数)分成若干组,每组中记录的下标相差d.对每组中全部元素进行直接插入排序,然后再用一个较小的增量(d/2)对它进行分组,在每组中再进行直接插入排序。当增量减到1时,进行直接插入排序后,排序完成。

package sort.algorithm;

public class ShellSort {

public static void main(String[] args) {

int a[] = { 1, 54, 6, 3, 78, 34, 12, 45, 56, 100 };

double d1 = a.length;

int temp = 0;

while (true)

{

//利用这个在将组内倍数减小

//这里依次为5,3,2,1

d1 = Math.ceil(d1 / 2);

//d为增量每个分组之间索引的增量

int d = (int) d1;

//每个分组内部排序

for (int x = 0; x d; x++)

{

//组内利用直接插入排序

for (int i = x + d; i a.length; i += d) {

int j = i – d;

temp = a[i];

for (; j = 0 temp a[j]; j -= d) {

a[j + d] = a[j];

}

a[j + d] = temp;

}

}

if (d == 1)

break;

}

for (int i = 0; i a.length; i++)

System.out.print(a[i]+” “);

}

}

五 交换类排序之冒泡排序

交换类排序核心就是每次比较都要进行交换

冒泡排序:是一种交换排序

每一趟比较相邻的元素,较若大小不同则就会发生交换,每一趟排序都能将一个元素放到它最终的位置!每一趟就进行比较。

时间复杂度O(n2),空间复杂度O(1)

package sort.algorithm;

//冒泡排序:是一种交换排序

public class BubbleSort {

// 按照递增顺序排序

public static void main(String[] args) {

// TODO Auto-generated method stub

int data[] = { 2, 6, 10, 3, 9, 80, 1, 16, 27, 20, 13, 100, 37, 16 };

int temp = 0;

// 排序的比较趟数,每一趟都会将剩余最大数放在最后面

for (int i = 0; i data.length – 1; i++) {

// 每一趟从开始进行比较,将该元素与其余的元素进行比较

for (int j = 0; j data.length – 1; j++) {

if (data[j] data[j + 1]) {

temp = data[j];

data[j] = data[j + 1];

data[j + 1] = temp;

}

}

}

for (int i = 0; i data.length; i++)

System.out.print(data[i] + ” “);

}

}

java数据排序

java 输入任意几个数字,怎样将他们从大到小排序?

public static void main(String[] args) { Scanner scan = new Scanner(System.in)。

}

System.out.println(“从大到小输出:”);

for (int m = num.length-1; m =0; m–) {

System.out.println(num[m]);//从大到小输出

}

}

String[] str = scan.nextLine().split(” “),// 输入时以空格隔开数字。

int[] num = new int[str.length];//初始化一个整型数组,长度为你输入数字的个数。

String[] str = scan.nextLine().split(” “);// 输入时以空格隔开数字

int[] num = new int[str.length];//初始化一个整型数组,长度为你输入数字的个数

for (int i = 0; i str.length; i++) {

num[i] = Integer.parseInt(String.valueOf(str[i]));//将字符转换为int型再赋给整型数组

}

Arrays.sort(num);//升序排序

System.out.println(“从小到大输出:”);

for (int j = 0; j num.length; j++) {

System.out.println(num[j]);//从小到大输出

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年3月27日 06:45:38
下一篇 2024年3月27日 06:54:54

相关推荐

  • excel表格筛选数据空格,excel表格筛选栏被锁定

    excel里面很多空格为什么筛选只筛选部分空格? 首先看一下筛选器列表和相应的数据,如下图所示,筛选器列表包含数据内容。空行,输入29,30。在筛选器列表中,由于有一个空行,所以缺少29和30。在空行输入数据,筛选器列表就会改变,有29和30个值。 在EXCEL自动筛选只能筛选一半,是因为中间有空白行,所以只能选择一半。 可以将空白行删除,或者将所有数据选择…

    2024年5月18日
    2700
  • 学java算法不好,java学不好怎么办

    Java开发为什么学不好? 最适合你的可能是昌平北大青鸟Java培训的零基础就业班,在这里老师手把手的教学辅导,而且最重要的是,这些入门知识体系足以像教小孩过马路那样,引导你学习那些令人头疼的变量和条件语句,以及初级编程语法。 其实这是很正常的,在学Java编程的时候,总是会有点摇摆不定。好比爬山,你在山脚下纠结该从哪条路上去,而实际上,每一条都能通往山顶,…

    2024年5月18日
    4000
  • excel中怎么合并行,excel如何合并行,各行数据不丢失

    excel如何将两行合并成一行 按住鼠标左键拖动选择需要合并的相邻两行,如下图中选中第2行。点击快捷工具栏“合并及居中”按钮,则第2行合并为一行。 打开Excel剪贴板:在Excel 2003中单击“编辑→Office剪贴板”;在Excel 2007/2010中,选择“开始”选项卡,在“剪贴板”组中单击右下角的对话框启动器打开剪贴板。 选择A1-A14复制,…

    2024年5月18日
    4300
  • 包含java虚拟机64位下载的词条

    哪里可以下载windows7家庭版32位 今天小编给大家带来win732位家庭精简版下载地址推荐,都是免激活的,直接下载安装即可。 (32位)windows7官方原版iso文件下载地址三:雨林木风YLMFWin732位原版旗舰版iso镜像下载可启动映像文件,可以用刻录软件刻录,也可用虚拟光驱载入使用,增强了实用性。 下载地址风林火山flhsghostwin7…

    2024年5月18日
    3500
  • excel做数据统计,excel做数据统计图

    在Excel中如何统计行数? 1、在 Excel 中计算行数有多种方法,以下是其中几种常用的方法:使用内置函数:Excel 提供了一个名为 ROW 的内置函数,可以用来计算行数。在需要计算行数的单元格中输入 =ROW(),按下回车键即可得到当前单元格所在行的行号。 2、首先,打开Excel表格程序,进入Excel表格程序中打开要计算行数的文件。然后,在Exc…

    2024年5月18日
    4100
  • c语言容器中数据求和,c语言 容器库

    【C语言】数据求和 首先把头文件,main函数写好#includestdio.h main(),如下图所示。之后需要定义几个变量,一个存放和,一个从1开始到100,如下图所示。 思路:直接定义两个变量n和sum,n用于接受键盘输入,sum用于存储累加和,每次输入并累加求和。 算法:1 输入N;2 循环输入N个数值;3 将每个数值累加到结果上;4 循环结束后输…

    2024年5月18日
    5100
  • java取modelandview的简单介绍

    Java中ModelAndView是做什么的? java modelandview是什么,让我们一起了解一下?modelandview是当控制器处理完请求时,会将包含视图名称或视图对象以及一些模型属性的ModelAndView对象返回到DispatcherServlet。因此,经常需要在控制器中构造ModelAndView对象。 ModelAndView是S…

    2024年5月18日
    4000
  • java=变量,java变量的基本属性

    Java语法介绍(三):变量 1、为了在Java中存储一个数据,必须将它容纳在一个变量之中。而数据类型决定了一个变量可以赋给什么值以及对变量进行什么样的操作。 2、在JAVA中我们通过三个元素来描述变量:变量类型,变量名以及变量值。变量,就是可以改变的量。例子:int 表示能存储整数类型的数据类型。 int a;表示你定义了一个存储整数的变量。 3、变量是程…

    2024年5月18日
    4500
  • java现在主要用于什么地方,java一般用来干嘛

    java是干什么的 我们常常说的Java,首先它是一种计算机编程语言,程序员用它来和计算机交流,把要求和设想用Java语言表达出来,这个过程就是我们所说的使用Java编程,所以我们说Java是一种计算机编程语言。 java是开发网站、写游戏、开发软件的。开发网站:Java在开发高访问、高并发、集群化的大型网站方面很有优势,因此许多网站都是用Java写的。Ja…

    2024年5月18日
    4400
  • 包含1009.说反话(20)java的词条

    如何用JAVA撷取一段文字的前20个作为返回结果? java.lang.string.splitsplit 方法将一个字符串分割为子字符串,然后将结果作为字符串数组返回。stringObj.split([separator,[limit]])参数stringObj 必选项。要被分解的 String 对象或文字。该对象不会被 split 方法修改。 读取wor…

    2024年5月18日
    3600

发表回复

登录后才能评论



关注微信