排序(java)

Linux磁盘扩容实战:用parted命令无损扩展/data分区(附常见报错解决方案) 本文详细介绍了在Linux生产环境中使用parted命令对已挂载的/data分区进行在线磁盘扩容的完整实战流程。通过风险评估、状态检查、parted工具深度解析及实战演练,指导用户安全完成动态扩容,并提供了常见报错如'Partition is being used'、MBR 2TB限制等的解决方案,确保业务不中断、数据不丢失。 阅读详情

归并排序

概括为一句话:将整体分为两个部分分别排序,然后择优(依次选择较小的插入或较大的)合并新的有序整体。这个过程本身就是递归,当只剩下一个元素的时候也就相当于排好序了。

import java.util.Scanner;
public class digui_MergeSort {
	public static void main(String[] args) {
		int n;
		int []a =new int[1000];
		Scanner in= new Scanner(System.in);
		n=in.nextInt();
		for (int i=0;i<n;i++)
			a[i]=in.nextInt();
		new  digui_MergeSort().MergeSort(a,0,n-1);
		for(int i=0;i<n;i++) {
			System.out.print(a[i]+" ");
		}
	}
	public void MergeSort(int []a,int low,int high) {
		int mid=0;
		while(low<high) {
			mid=low+(high-low)/2;//分成两个部分,分别排序
			MergeSort(a,low,mid);
			MergeSort(a,mid+1,high);
			Merge(a,low,mid,high);//合并
			return;
		}
	}

	private void Merge(int[] a, int low, int mid, int high) {
		// TODO Auto-generated method stub
		int i=low,j=mid+1,k=0;
		int []b = new int[high-low+1];
		while(i<=mid&&j<=high) {
			if(a[i]<=a[j]) {//选择较小的插入
				b[k++]=a[i++];
			}else {
				b[k++]=a[j++];
			}
		}
		while(i<=mid) {
			b[k++]=a[i++];
		}
		while(j<=high) {
			b[k++]=a[j++];
		}
		for(int x=0,m=low;m<=high;m++) {
			a[m]=b[x++];
		}
		
	}
}


希尔排序

希尔排序的实质就是分组插入排序,该方法又称缩小增量排序,因DL.Shell于1959年提出而得名。

该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很高的,因此希尔排序在时间效率上比前两种方法有较大提高。

import java.util.Scanner;

public class shellsort {
	public static void main(String[] args) {
		int n;//数据个数
		int data[];//需排序的数组
		Scanner sc = new Scanner(System.in);
		n = sc.nextInt();
		data = new int[n];
		for (int i = 0; i < n; i++)
			data[i] = sc.nextInt();
		int d[] = { 5, 3, 1 };//默认依次分割为5,3,1组排序。也可以自己输入d数组但最后一定要有1(回归到插入排序)。
		ShellSort(data, d);
		for (int i = 0; i < n - 1; i++)
			System.out.print(data[i] + " ");
		System.out.println(data[n - 1]);
	}

	private static void ShellSort(int[] data, int[] d) {
		int f = 0;
		for (int i = 0; i < d.length; i++) {
			int h = d[i];//第i轮分为h组,也就在原数组每隔h个取个元素
			for (int j = h; j < data.length; j++) {//这个for里面就是插入排序了
				if (data[j] < data[j - h]) {
					int temp = data[j];
					if (f == 1)//控制格式
						System.out.print(" ");
					f = 1;
					System.out.print(temp);
					int t;
					for (t = j; t >= h && temp < data[t - h]; t -= h) {
						data[t] = data[t - h];
					}
					data[t] = temp;
				}
			}
		}
		System.out.println();
	}

}

堆排序

思想可归纳为两个操作:

(1)根据初始数组去构造初始堆(构建一个完全二叉树,保证所有的父结点都比它的孩子结点数值大)。

(2)每次交换第一个和最后一个元素,输出最后一个元素(最大值),然后把剩下元素重新调整为大根堆。 

当输出完最后一个元素后,这个数组已经是按照从小到大的顺序排列了。


public class HeapSort {

	public static void main(String[] args) {
		int n;//元素个数
		int[] R; //需排序的数组
		Scanner in= new Scanner(System.in);
		n=in.nextInt();
		R = new int[n];
		for(int i=0;i<n;i++){
			R[i]=in.nextInt();
		}
		heapSort(R); 
		for(int i=0;i<n;i++){
			System.out.print(R[i]+" ");
		}
		System.out.println();
	}
	 static void heapSort(int[] R){
         int tmp = 0;
         heapAdjust(R,0,R.length-1);//建最小堆
         for(int i=0;i<R.length;i++){
 			System.out.print(R[i]+" ");
 		}
 		System.out.println();
         for(int i = R.length-1;i>0;--i){ //取出堆顶最大元素。
        	 tmp = R[0];
        	 R[0]=R[i];
        	 R[i]=tmp;
        	 heapAdjust(R,0,i-1);//剩下的元素继续构建最大堆
         }
         
        }
	 
	 static void heapAdjust(int[] R,int low,int high){
		 if((low<high)&&(high<R.length)){
			 int j = 0;
			 int k = 0;
			 int tmp = 0;
			 for(int i=(high-1/ 2);i>=low;--i){//根据完全二叉树的特性,用最后的元素求其父亲的地址,若以0作为根:左孩=2*父+1,右孩=2*父+2。若以1为根:左孩=2*父,右孩=2*父+1,现已知儿子求父亲。
				 tmp = R[i];
				 k = i;
				 j = 2 * k + 1 ;//左孩子
				while (j <= high) {
					if ((j < high) && (j + 1 <= high) && (R[j] < R[j + 1])) {//若右孩子大于左孩子则j++
						++j;
					}
					if (tmp < R[j]) {//若孩子大于父亲则覆盖
						R[k] = R[j];
						k = j;
						j = 2 * k + 1;
					} else {
						break;
					}
				}
				 R[k]=tmp;//填补k对应的位置
			 }
		 }
	 }
}

快速排序

快速排序的基本思想是,通过一轮的排序将序列分割成独立的两部分,其中一部分序列的关键字(这里主要用值来表示)均比另一部分关键字小。继续对长度较短的序列进行同样的分割,最后到达整体有序。在排序过程中,由于已经分开的两部分的元素不需要进行比较,故减少了比较次数,降低了排序时间。详细描述:首先在要排序的序列 a 中选取一个中轴值,而后将序列分成两个部分,其中左边的部分 b 中的元素均小于或者等于 中轴值,右边的部分 c 的元素 均大于或者等于中轴值,而后通过递归调用快速排序的过程分别对两个部分进行排序,最后将两部分产生的结果合并即可得到最后的排序序列。

“基准值”的选择有很多种方法。最简单的是使用第一个记录的关键字值。但是如果输入的数组是正序或者逆序的,就会将所有的记录分到“基准值”的一边。较好的方法是随机选取“基准值”,这样可以减少原始输入对排序造成的影响。但是随机选取“基准值”的开销大。

import java.util.Scanner;

public class QuickSort {
	public static void main(String[] args) {
		int n;//元素个数
		int[] R;//需排序的数组
		Scanner in = new Scanner(System.in);
		n = in.nextInt();
		R = new int[n];
		for (int i = 0; i < n; i++) {
			R[i] = in.nextInt();
		}
		quickSort(R, 0, R.length - 1);
		for (int i = 0; i < n-1; i++) {
			System.out.print(R[i] + " ");
		}
		System.out.println(R[n-1]);
	}
		public static int[] quickSort(int[] data, int low, int hight) {

		int pivot = data[low];
		int i = low + 1;
		int j = hight;
		int temp;
		while (i < j) {
			while ((j > i) && pivot <= data[j]) {//若data[j]大于我们所选的基准则j往前走
				j--;
			}
			while ((j > i) && pivot >= data[i]) {//若data[i]小于我们所选的基准则j往后走
				i++;
			}
			if (i < j) {//交换i,j对应的值
				temp = data[i];
				data[i] = data[j];
				data[j] = temp;
			}
		}
		if(data[j]>data[low])//我所选的值比基准值大则基准与前面一个元素交换。
		{
			j--;
			i--;
		}
		if (data[j] < data[low]) {//与基准交换
			temp = data[low];
			data[low] = data[j];
			data[j] = temp;
		}
		if (i - low > 1)//分治如上调整
			quickSort(data, low, i - 1);
		if (hight - j > 1)
			quickSort(data, j + 1, hight);                                                                                                                                                                                                                                                                                     
		return data;
	}
}



Unity 横版游戏开发天花板?状态机、联机同步与横版动作游戏架构全都有 在 Unity 横版动作游戏开发领域,最耗时间的往往不是角色移动,而是整套“可扩展架构”的搭建。包括角色状态管理、敌人 AI、武器系统、关卡编辑器、联机同步、输入适配、UI 与存档系统等。2D Action Platformer Kit 的核心价值,并不只是“提供素材”,而是它已经帮开发者搭好了一整套适用于横版动作游戏的底层框架。 阅读详情

相关推荐

无线网卡选购指南:哪些型号支持Kali Linux的监听模式?附免驱动网卡推荐

本文详细解析了如何在Kali Linux下选购支持监听模式的无线网卡。核心在于选择兼容的芯片组,如Atheros AR9271和Ralink RT3070等经典型号,并提供了免驱动网卡推荐与实战配置指南,帮助安全研究人员和爱好者快速搭建无线测试环境。

wind6的博客 1557

Java排序

本文章主要为大家讲解了排序的相关知识,讲述了我们常用的七个大的排序比较有插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序和归并排序。在讲解他们的过程中我们为大家先介绍他们的原理是什么,再一步一步的实现他们,并将代码展示。此文章共2万字,是一篇超级详细的排序讲解!!!

xinhang10的博客 2574

FFmpeg实战:5分钟搞定m3u8视频下载与ts文件合并(附完整命令)

本文详细介绍了如何使用FFmpeg快速下载m3u8视频并合并ts文件为mp4格式。通过简洁的命令行操作,读者可以轻松完成视频处理任务,包括环境准备、链接获取、下载合并及性能优化等实用技巧,特别适合需要高效处理流媒体内容的用户。

weixin_30836759的博客 221

java中对数组进行排序_如何在Java中对数组排序

java中对数组进行排序Java Array is like a container that can hold a fixed number of the same type of items, it can be primitive types as well as Objects. Java Array就像一个容器,可以容纳固定数量的相同类型的项目,它可以是原始类型也可以是对象。 Jav...

从零开始的教程世界 7522

基于ESP32与PCM5102的WiFi无损音频传输系统设计与实现

本文详细介绍基于ESP32与PCM5102的WiFi无损音频传输系统设计与实现。通过I2S接口直接传输PCM数据,避免SRC重采样,实现真正的HIFI级音质。涵盖硬件连接、软件架构、网络传输优化及实际音质对比,为音频爱好者提供高性价比的无损无线音频解决方案。

rnn9storyteller的博客 948

先进封装技术 Part03---重布线层(RDL)的科普

RDL是一种在芯片封装过程中用于重新分布电气连接的技术。它通过在芯片表面或中介层上形成额外的布线层,重新分配芯片的I/O(输入/输出)位置,以适应不同的封装需求和提高电气连接的灵活性。

阿拉伯梳子的专栏 4704

java 排序 详解

java 排序 详解

T_Y_F_的博客 2070

用Cloudflare Worker搭建你的私人Gemini Pro API

文章介绍如何通过开源项目gemini-cli-openai将谷歌Gemini模型转换为兼容OpenAI API的服务,解决Gemini CLI的三大使用障碍:网络访问、命令行操作和生态整合问题。部署流程主要包括获取Google OAuth2凭证、配置Cloudflare Worker项目并设置KV存储,最终可在CherryStudio等图形客户端中调用Gemini。该方法利用Cloudflare全球网络实现加速访问,同时保持认证信息安全可控。

Hsiao的二进制生活 1684

Java List排序 java ListMap 排序 Java listmap 模拟 oracle 排序 Java listmap 模拟 mysql 排序

对 Listmap的结果集进行排序,类似于模拟 数据库中的Order By 排序。那么主要的需求有: 排序方式 ASC/DESC ; null 值处理:NULL FIRST / NULL LAST 。 在Java 中要实现以上相应的功能,对List进行排序,会遇到对应问题: 元素中有 null ,排序时候会抛出 NPE 、 null 元素放在 最前、最后面的问题。

HaHa_Sir的博客 3938

基于AOD-Net与GAN的深度学习去雾算法开发

本文提出一种结合AOD-Net与GAN的深度学习去雾算法。通过改进的AOD-GAN网络架构,集成风格迁移模块,设计包含对抗损失、内容损失和风格损失的复合目标函数。实验表明,该方法在PSNR(24.67)、SSIM(0.92)和FID(32.15)指标上优于传统方法,实现了端到端的物理模型引导图像去雾。未来将优化多尺度特征融合和轻量化部署。

huanghm88的专栏 594

【EB_Tresos专题】-06-配置一个UDS诊断DID

<--返回「Autosar_BSW高阶配置」总目录--> <--返回「Autosar_BSW高阶配置」专栏主页--> <--返回「个人博客」首页--> <--返回「Autosar_BSW高阶配置」总目录--> <--返回「Autosar_BSW高阶配置」专栏主页--> <--返回「个人博客」首页--> 结尾 ...

「汽车电子助手」的博客 4087

Java自然排序与定制排序

一、自然排序 自然排序:类实现了java.lang.Comparable接口,重写compareTo()的规则 如果当前对象this大于形参对象obj,则返回正整数;如果当前对象this小于形参对象obj,则返回负整数;如果当前对象this等于参数对象obj,则返回零。 1.Person类 public class Person implements Comparable<Pers...

Luck_ZZ的博客 2948

Vue2 - 详细实现解析Markdown内容生成侧边栏Toc目录索引,识别文章内容根据大标题/小标题自动生成多级文章目录,点击目录导航时跳转到文章内容对应的锚点位置带过渡动画,滑过锚点时高亮对应标题

vue2,nuxt2,Markdown,目录,文章目录锚点,滚动高亮导航文字,根据页面滚动高亮显示目录的侧边栏,自动提取标题生成右侧目录,vuemarkdown解析并生成目录,滚动页面的时候文章目录跟着选中效果,侧边栏滚动跟随页面,右边目录固定,左边内容可以滚动并且与左边目录联动,实现监听滚动,锚点定位,文章目录滚动跟随高亮,右边菜单点击目录滚动到对应标题,报错,渲染失败,文章内容,读取#标题符号,自动生成一个目录树,自动生成Toc目录,博客内容生成目录索引,资讯文章,生成锚点目录树TOC,详细示例代码教

🏆 前端领域优质创作者 3670

java排序

时间复杂度:O(NlogN),建堆O(N) ,调整堆O(logN) ,共N - 1 次调整。- 时间复杂度:O(N^2),其中N 是数组长度,最坏和平均情况都是比较和交换接近N^2 次。- 时间复杂度:O(N^2),需进行N - 1 趟,每趟找最小值最多比较N - i 次。- 把堆顶元素(最大值)与待排序区间最后一个元素交换,将最大值移到已排序区间。- 把数组分为有序区间和无序区间,初始时有序区间为空,无序区间为整个数组。- 每次从无序区间找最小值,与无序区间第一个元素交换,使有序区间扩大。

j202312101422的博客 1316

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Java 排序

TreeMap 本身并不直接支持根据值(value)进行排序,因为它的设计初衷是按键(key)的自然顺序或提供的 Comparator 进行键排序。c. 如果Map中有多个具有相同值的键,Collectors.toMap()的合并函数将决定保留哪个键。b. 使用 Collections.sort() 方法对这个列表进行排序,并提供一个自定义的比较器(Comparator),该比较器根据值进行比较。a. 将Map转换为一个Stream,然后使用sorted()方法对Stream中的元素进行排序。

qq_44972915的博客 1023

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

java坐标排序_java排序

图片来自网络一、用泛型实现快排,可以传入不通类型进行排序,比如String数组,Integer数组。/*** 快速排序**@authorchx**/public classQuickSort {/*** 数组内数值的交换函数**@paramarr* 原数组*@paramleftIndex* 左索引*@paramrightIndex* ...

weixin_35130354的博客 1024

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

java数组排序的方法_Java数组排序方法详解

数组,其实就是一个给定了大小给定了类型的容器,在这容器中有你设定的元素,你可以对这些元素进行各种升降排列,或者找出其中特殊的元素并进行一系列的运算。数组,本身是有序的元素序列,本文我们就来看看Java数组排序的几个方法。一、冒泡排序举 个 栗 子:5 2 0 4 1 3 一个容量为七的数组排升序(降序同理,最大值变最小就ok)①从这组数中找那个冒泡的(最大的),把它踢到最后 2 0 4 1 3 5...

weixin_42510805的博客 1万+

【Java基础】——Java排序

【Java基础】--Java排序 1、选择排序(Select Sort) 2、冒泡排序(Bubble Sort) 3、插入排序(Insert Sort) 4、希尔排序(Shell Sort) 5、归并排序(Merge Sort) 6、快速排序(Quick Sort) 7、堆排序(Heap Sort)

lingxw的博客 1427

java对列表数据排序_如何在Java中对列表进行排序

java对列表数据排序Sometimes we have to sort a list in Java before processing its elements. In this tutorial, we will learn how to sort a list in the natural order. We will also learn how to use our own Compa...

从零开始的教程世界 5367

java 8 排序_java8——排序

对数据进行排序是平常经常会用到的操作之一,使用Jav8排序可以减少你在排序这方面的代码量,优化你的代码。测试用例代码定义个实体类User,拥有姓名name,年龄age,积分credits三个属性,定义一个包含User的集合,用于排序,下面是代码/* 这里偷个懒,用lombok注解生成实体类getset等一些基本方法 */@Data@AllArgsConstructor@NoArgsConstruc...

weixin_32568295的博客 1万+

java排序_Java 排序

概述常用到对Java对数组对象进行排序,今天来总结一下,Java对排序问题的处理。Java排序一般包括基础排序和Lambda Comparator增强排序。目的时为了凸显增强排序的优势。准备我们先定义一个简单的实体类:public class Flux { private String name; private int age; public Flux(final St...

weixin_39617215的博客 374

arraylist 排序 java_Java对ArrayList进行排序

数字使用直接比较大小来排序,String的话,使用compare()方法进行排序。测试代码:1.对字符串对象排序@Testpublic void test17() throws Exception {List< String > stringList = new ArrayList<>();stringList.add("haha");stringList.add("123...

weixin_36050894的博客 1617

java中的排序方法_Java中8种常见的排序方法

本博主要介绍Java中几种常见的排序算法;/*排序方法的演示1)插入排序(直接插入排序、希尔排序)2)交换排序(冒泡排序、快速排序)3)选择排序(直接选择排序、堆排序)4)归并排序5)分配排序(基数排序)所需辅助空间最多:归并排序所需辅助空间最少:堆排序平均速度最快:快速排序不稳定:快速排序,希尔排序,堆排序。*/其中,文字部分来自于网上整理,代码部分属于自己实现的(堆排序,归并排序,基数排序代码...

weixin_36048031的博客 4751

java给数组排序_java数组如何排序

java中几种数组排序的方法:1、使用Arrays.sort()排序Arrays.sort()排序方法在java中是最简单且最常用的排序方法。int []arr1= {45,34,59,55};Arrays.sort(arr1);//调用方法排序即可Arrays.sort()的使用主要分为对基本数据类型数组的排序和对对象数组的排序。2、冒泡排序简单来说,冒泡排序就是重复地走访过要排序的数列,一次比...

weixin_34927903的博客 6861

Java—Sort排序

Java中Sort排序是非常常用的方法,这一章我们主要来认识一下Sort的用法和相关的实现。一、数组Sort排序升序排序,直接使用Arrays.Sort方法,例如:int[] array = {10, 3, 6, 1, 4, 5, 9}; //正序排序 Arrays.sort(array);//会检查数组个数大于286且连续性好就使用归并排序,若小于47使用插入排序,其余情况使用双轴快速排序 Sy...

Just Do It 15万+

java对arraylist排序_JAVA对ArrayList排序

ava如何对ArrayList中对象按照该对象某属性排序增加排序功能,打印时:输出学生对象的时候,需要先按照年龄排序,如果年龄相同,则按照姓名排序,如果姓名也相同,则按照学号排序。Java代码 CodehighlightingproducedbyActiproCodeHighlighter(freeware)http://www.CodeHighlighter.com/-->i...

weixin_42488997的博客 598
上一篇: 51nod 1596 搬货物
下一篇: L2-017. 人以群分
也道长
博客等级 码龄9年 11粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值