用Java实现几种常见的排序算法

数据结构与算法—常见的几种排序算法及实现(java) 所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。排序算法,就是如何使得记录按照要求排列的方法。排序算法在很多领域得到相当地重视,尤其是在大量数据的处理方面。 以下我们将介绍几种常见的排序,几种排序算法的时间复杂度及稳定性如下: 1、冒泡排序 冒泡排序的效率很低,但是算法实现起来很简单,因此很适合作为研究排序的入门算法。 基本思想 对当前还未排好序的... 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> 用Java语言实现的各种排序,包括插入排序、冒泡排序、选择排序、Shell排序、快速排序、归并排序、堆排序、SortUtil等。 插入排序: package org.rut.util.algorithm.support; import org.rut.util.algorithm.SortUtil; /** * @author treeroot * @since 2006-2-2 * @version 1.0 */ public class InsertSort implements SortUtil.Sort{ /* (non-Javadoc) * @see org.rut.util.algorithm.SortUtil.Sort#sort(int[]) */ public void sort(int[] data) { int temp; for(int i=1;i for(int j=i;(j>0)&&(data[j] SortUtil.swap(data,j,j-1); } } } } 冒泡排序: package org.rut.util.algorithm.support; import org.rut.util.algorithm.SortUtil; /** * @author treeroot * @since 2006-2-2 * @version 1.0 */ public class BubbleSort implements SortUtil.Sort{ /* (non-Javadoc) * @see org.rut.util.algorithm.SortUtil.Sort#sort(int[]) */ public void sort(int[] data) { int temp; for(int i=0;i for(int j=data.length-1;j>i;j--){ if(data[j] SortUtil.swap(data,j,j-1); } } } } } 选择排序: package org.rut.util.algorithm.support; import org.rut.util.algorithm.SortUtil; /** * @author treeroot * @since 2006-2-2 * @version 1.0 */ public class SelectionSort implements SortUtil.Sort { /* * (non-Javadoc) * * @see org.rut.util.algorithm.SortUtil.Sort#sort(int[]) */ public void sort(int[] data) { int temp; for (int i = 0; i < data.length; i ) { int lowIndex = i; for (int j = data.length - 1; j >i; j--) { if (data[j] < data[lowIndex]) { lowIndex = j; } } SortUtil.swap(data,i,lowIndex); } } } Shell排序: package org.rut.util.algorithm.support; import org.rut.util.algorithm.SortUtil; /** * @author treeroot * @since 2006-2-2 * @version 1.0 */ public class ShellSort implements SortUtil.Sort{ /* (non-Javadoc) * @see org.rut.util.algorithm.SortUtil.Sort#sort(int[]) */ public void sort(int[] data) { for(int i=data.length/2;i>2;i/=2){ for(int j=0;j insertSort(data,j,i); } } insertSort(data,0,1); } /** * @param data * @param j * @param i */ private void insertSort(int[] data, int start, int inc) { int temp; for(int i=start inc;i for(int j=i;(j>=inc)&&(data[j] SortUtil.swap(data,j,j-inc); } } } } 快速排序: package org.rut.util.algorithm.support; import org.rut.util.algorithm.SortUtil; /** * @author treeroot * @since 2006-2-2 * @version 1.0 */ public class QuickSort implements SortUtil.Sort{ /* (non-Javadoc) * @see org.rut.util.algorithm.SortUtil.Sort#sort(int[]) */ public void sort(int[] data) { quickSort(data,0,data.length-1); } private void quickSort(int[] data,int i,int j){ int pivotIndex=(i j)/2; //swap SortUtil.swap(data,pivotIndex,j); int k=partition(data,i-1,j,data[j]); SortUtil.swap(data,k,j); if((k-i)>1) quickSort(data,i,k-1); if((j-k)>1) quickSort(data,k 1,j); } /** * @param data * @param i * @param j * @return */ private int partition(int[] data, int l, int r,int pivot) { do{ while(data[ l] while((r!=0)&&data[--r]>pivot); SortUtil.swap(data,l,r); } while(l SortUtil.swap(data,l,r); return l; } } 改进后的快速排序: package org.rut.util.algorithm.support; import org.rut.util.algorithm.SortUtil; /** * @author treeroot * @since 2006-2-2 * @version 1.0 */ public class ImprovedQuickSort implements SortUtil.Sort { private static int MAX_STACK_SIZE=4096; private static int THRESHOLD=10; /* (non-Javadoc) * @see org.rut.util.algorithm.SortUtil.Sort#sort(int[]) */ public void sort(int[] data) { int[] stack=new int[MAX_STACK_SIZE]; int top=-1; int pivot; int pivotIndex,l,r; stack[ top]=0; stack[ top]=data.length-1; while(top>0){ int j=stack[top--]; int i=stack[top--]; pivotIndex=(i j)/2; pivot=data[pivotIndex]; SortUtil.swap(data,pivotIndex,j); //partition l=i-1; r=j; do{ while(data[ l] while((r!=0)&&(data[--r]>pivot)); SortUtil.swap(data,l,r); } while(l SortUtil.swap(data,l,r); SortUtil.swap(data,l,j); if((l-i)>THRESHOLD){ stack[ top]=i; stack[ top]=l-1; } if((j-l)>THRESHOLD){ stack[ top]=l 1; stack[ top]=j; } } //new InsertSort().sort(data); insertSort(data); } /** * @param data */ private void insertSort(int[] data) { int temp; for(int i=1;i for(int j=i;(j>0)&&(data[j] SortUtil.swap(data,j,j-1); } } } } 归并排序: package org.rut.util.algorithm.support; import org.rut.util.algorithm.SortUtil; /** * @author treeroot * @since 2006-2-2 * @version 1.0 */ public class MergeSort implements SortUtil.Sort{ /* (non-Javadoc) * @see org.rut.util.algorithm.SortUtil.Sort#sort(int[]) */ public void sort(int[] data) { int[] temp=new int[data.length]; mergeSort(data,temp,0,data.length-1); } private void mergeSort(int[] data,int[] temp,int l,int r){ int mid=(l r)/2; if(l==r) return ; mergeSort(data,temp,l,mid); mergeSort(data,temp,mid 1,r); for(int i=l;i<=r;i ){ temp[i]=data[i]; } int i1=l; int i2=mid 1; for(int cur=l;cur<=r;cur ){ if(i1==mid 1) data[cur]=temp[i2 ]; else if(i2>r) data[cur]=temp[i1 ]; else if(temp[i1] data[cur]=temp[i1 ]; else data[cur]=temp[i2 ]; } } } 改进后的归并排序: package org.rut.util.algorithm.support; import org.rut.util.algorithm.SortUtil; /** * @author treeroot * @since 2006-2-2 * @version 1.0 */ public class ImprovedMergeSort implements SortUtil.Sort { private static final int THRESHOLD = 10; /* * (non-Javadoc) * * @see org.rut.util.algorithm.SortUtil.Sort#sort(int[]) */ public void sort(int[] data) { int[] temp=new int[data.length]; mergeSort(data,temp,0,data.length-1); } private void mergeSort(int[] data, int[] temp, int l, int r) { int i, j, k; int mid = (l r) / 2; if (l == r) return; if ((mid - l) >= THRESHOLD) mergeSort(data, temp, l, mid); else insertSort(data, l, mid - l 1); if ((r - mid) >THRESHOLD) mergeSort(data, temp, mid 1, r); else insertSort(data, mid 1, r - mid); for (i = l; i <= mid; i ) { temp[i] = data[i]; } for (j = 1; j <= r - mid; j ) { temp[r - j 1] = data[j mid]; } int a = temp[l]; int b = temp[r]; for (i = l, j = r, k = l; k <= r; k ) { if (a < b) { data[k] = temp[i ]; a = temp[i]; } else { data[k] = temp[j--]; b = temp[j]; } } } /** * @param data * @param l * @param i */ private void insertSort(int[] data, int start, int len) { for(int i=start 1;i for(int j=i;(j>start) && data[j] SortUtil.swap(data,j,j-1); } } } } 堆排序: package org.rut.util.algorithm.support; import org.rut.util.algorithm.SortUtil; /** * @author treeroot * @since 2006-2-2 * @version 1.0 */ public class HeapSort implements SortUtil.Sort{ /* (non-Javadoc) * @see org.rut.util.algorithm.SortUtil.Sort#sort(int[]) */ public void sort(int[] data) { MaxHeap h=new MaxHeap(); h.init(data); for(int i=0;i h.remove(); System.arraycopy(h.queue,1,data,0,data.length); } private static class MaxHeap{ void init(int[] data){ this.queue=new int[data.length 1]; for(int i=0;i queue[ size]=data[i]; fixUp(size); } } private int size=0; private int[] queue; public int get() { return queue[1]; } public void remove() { SortUtil.swap(queue,1,size--); fixDown(1); } //fixdown private void fixDown(int k) { int j; while ((j = k << 1) <= size) { if (j < size && queue[j] j ; if (queue[k]>queue[j]) //不用交换 break; SortUtil.swap(queue,j,k); k = j; } } private void fixUp(int k) { while (k >1) { int j = k >>1; if (queue[j]>queue[k]) break; SortUtil.swap(queue,j,k); k = j; } } } } SortUtil: package org.rut.util.algorithm; import org.rut.util.algorithm.support.BubbleSort; import org.rut.util.algorithm.support.HeapSort; import org.rut.util.algorithm.support.ImprovedMergeSort; import org.rut.util.algorithm.support.ImprovedQuickSort; import org.rut.util.algorithm.support.InsertSort; import org.rut.util.algorithm.support.MergeSort; import org.rut.util.algorithm.support.QuickSort; import org.rut.util.algorithm.support.SelectionSort; import org.rut.util.algorithm.support.ShellSort; /** * @author treeroot * @since 2006-2-2 * @version 1.0 */ public class SortUtil { public final static int INSERT = 1; public final static int BUBBLE = 2; public final static int SELECTION = 3; public final static int SHELL = 4; public final static int QUICK = 5; public final static int IMPROVED_QUICK = 6; public final static int MERGE = 7; public final static int IMPROVED_MERGE = 8; public final static int HEAP = 9; public static void sort(int[] data) { sort(data, IMPROVED_QUICK); } private static String[] name={ "insert", "bubble", "selection", "shell", "quick", "improved_quick", "merge", "improved_merge", "heap" }; private static Sort[] impl=new Sort[]{ new InsertSort(), new BubbleSort(), new SelectionSort(), new ShellSort(), new QuickSort(), new ImprovedQuickSort(), new MergeSort(), new ImprovedMergeSort(), new HeapSort() }; public static String toString(int algorithm){ return name[algorithm-1]; } public static void sort(int[] data, int algorithm) { impl[algorithm-1].sort(data); } public static interface Sort { public void sort(int[] data); } public static void swap(int[] data, int i, int j) { int temp = data[i]; data[i] = data[j]; data[j] = temp; } }
java通用的各种排序算法(改进版) java写的各种通用排序算法,并且对各种算法进行了适当的改进(只需要实现接口即可实现各种排序) 立即下载

相关推荐

PMF5.0计算

EPA PMF5.0 计算步骤

nuistsy的博客 4546

经典排序算法的 C语言 | Java 实现

转载于:https://juejin.im/post/5b62e88b6fb9a04fd0447fa5

weixin_34337381的博客 122

CSM中一些常见问题的解决方式

CSM中一些常见问题的解决方式 抖动 摄像机在每帧移动或者旋转时,会产生较严重的抖动问题。

小龙虾的博客 2132

Java、C语言实现快速排序算法

代码: #include #include int   findpivot(); int   partion (); void  quicksort (); int main() {     int n,i;     printf("请输入需要排序的元素的个数:");     scanf("%d",&n);     int a[n];     for(i = 0;i

即使没人看我也要写 745

Dify知识库文档批量下载神器:一键导出所有文件到本地

在使用Dify进行知识库管理的过程中,我们经常遇到一个实际问题:如何将已上传到知识库中的文档批量下载到本地?目前Dify的管理界面虽然功能强大,但暂时没有提供直接的UI界面来批量导出或下载知识库内的文档。这意味着如果我们需要将知识库中的文件备份到本地或进行离线处理,只能通过API接口来实现。本文将详细介绍如何利用Dify的REST API构建一个完整的知识库文档下载解决方案,这也是目前实现知识库文件批量下载到本地的唯一可行路径。🎉进入大模型应用与实战专栏 | 🚀查看更多专栏内容首先,我们需要在Dify的

羊城迷鹿的博客 3474

Chamfer Loss

ChamferLoss是一种常用于3D点云(pointcloud)处理的损失函数,特别是在点云生成和对齐任务中。它的目的是度量两个点集之间的相似度,特别是在点云重建、配准或生成等任务中,常用于优化模型使得生成的点云更接近真实的点云。

夜空中明亮的星的专栏 455

c语言的排序用java改写,基于C语言的对排序查找的支持_java_C_编程语言_课课家

当今社会经济与科技的快速发展离不开信息技术,而编程员成为了当今社会的热门职位,高薪、灵活、创新这些褒义词用来形容一个程序员实在不为过。现代编程语言中有一种语言是较为简单的、完全面向对象的且类型安全的语言,它就是C#语言,其基于.NET平台为应用开发而全新设计的一种变成语言,它去掉了C++中的许多复杂性,借鉴和修改了java的许多特性,使得其显得更加的易于使用以及不易出错。排序和查找是编程人员经常需...

weixin_33643798的博客 174

CDD那些事 - DID and SecurityAccess

本文介绍了SecurityAccessSID27的安全访问配置流程:1.通过StateGroups添加Level2群组;2.在Classes定义L2子功能;3.配置4步解锁流程,选择对应解锁等级;4.在DiagnosticInstance设置请求响应。同时说明了DID配置的两种方式:在DIDs页面定义或通过Identification页面创建,前者定义更全面。文章还提到ServiceList支持view/edit模式,其中edit模式可配置DID的多服务支持(如同时支持SID22读取和SID2E写入),但该

ziteng21的博客 256

c语言的排序用java改写,C语言常用排序算法

1、选择排序在要排序的一组数中,选出最小的一个数与第一个位置的数交换,然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止。 选择排序是不稳定的。算法复杂度O(n2)--[n的平方]。例如,#include void select_sort(int *x, int n){int i, j, min, t;for (i=0; i{min = i; /*假设当前...

weixin_39628339的博客 229

22、嵌入式软件随机延迟生成与加密算法防护技术

本文探讨了嵌入式软件中的随机延迟生成方法与块密码软件实现的高阶掩码及洗牌技术。重点介绍了浮动均值延迟生成方法,其在8位AVR平台上的实现效率为Θ(1),显著提升了抗相关功率分析(CPA)攻击的能力,相比传统方法更安全且轻量。同时,分析了高阶掩码与洗牌技术结合的方案,通过理论建模量化其对高级差分功率分析(DPA)攻击的抵抗能力,并以AES为例展示了该方案的应用流程。最后对比了不同防护技术在安全性与开销之间的权衡,为实际应用中选择合适的安全策略提供了依据。未来可进一步优化实现效率并融合多种防护手段以应对复杂安全

fern8的博客 88

从通用到定制:营销Agent如何跨越数据鸿沟,实现对话SOP的个性化飞跃

从通用到定制:营销Agent如何跨越数据鸿沟,实现对话SOP的个性化飞跃

丨汀、的博客 656

几种常见排序算法的java实现

一、几种常见的排序算法性能比较 排序算法 最好时间 平均时间 最坏时间 辅助内存 稳定性 备注 简单选择排序 O(n^2) O(n^2) O(n^2) O(1) 不稳定 n小时较好 直接插入排序 O(n) O(n^2) O(n^2) O(1) 稳定 大部分已有序的较好 冒泡排序 O(n) O(n^2)

晚秋星辰 936

背靠背VSC直流母线电压控制与同步发电机并网发散问题:原理、分析与解决方案

背靠背VSC直流母线电压控制与同步发电机并网发散问题分析 摘要: 本文研究了背靠背VSC系统在整流侧由理想三相电源切换为同步发电机时出现的直流母线电压振荡和发散问题。通过理论分析发现,锁相环同步失稳、等效阻抗失配和直流母线电容参数失配是导致系统失稳的关键因素。当整流侧接入同步发电机后,系统形成正反馈振荡回路,同时等效电感增大导致电流环响应速度降低,直流侧电容容量不足无法吸收发电机功率波动。文章提出了从跟网型控制到构网型VSG控制的完整升级方案,包含详细的MATLAB/Simulink建模和控制算法实现,并通

huanghm88的专栏 122

java实现几种常见的排序算法

几种常见排序算法 几种常见排序算法 写在前面基础介绍初级排序算法 selection sort选择排序insertion sort插入排序ShellSort希尔排序shuffing不是排序算法 merge sort归并排序 Abstract in-place merge原地归并的抽象方法Top-down mergesort自顶向下的归并排序Bottom-u

java、c++、机器学习方向King 1254

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

java分类算法代码_Java实现几种常见排序算法代码

稳定度(稳定性)一个排序算法是稳定的,就是当有两个相等记录的关键字R和S,且在原本的列表中R出现在S之前,在排序过的列表中R也将会是在S之前。排序算法分类常见的有插入(插入排序/希尔排序)、交换(冒泡排序/快速排序)、选择(选择排序)、合并(归并排序)等。一.插入排序插入排序(Insertion Sort),它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并...

weixin_39546747的博客 297

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

java中常见的几种排序算法的实现及比较

文章目录1.冒泡排序1.1 冒泡排序普通版1.2 冒泡排序升级版2.选择排序3.插入排序4.快速排序5.归并排序6.希尔排序7.基数排序8.堆排序各种算法的比较 1.冒泡排序 1.1 冒泡排序普通版   每次冒泡过程都是从数列的第一个元素开始,然后依次和剩余的元素进行比较,若小于相邻元素,则交换两者位置,同时将较大元素作为下一个比较的基准元素,继续将该元素与其相邻的元素进行比较,直到数列的最后一个元素 . 示意图如下: /** * 冒泡排序: * 依次比较相邻的元素,若发现逆顺序,则交换。小的向前换

qq_40378121的博客 448

几种常见排序算法java实现

选择排序、插入排序、希尔排序class Sort{ //选择排序 public static void Selection_sort(Comparable[] a){ int N = a.length; for(int i = 0; i &lt; N; i++){ int min = i; for(in...

Ysh-uestc 206

Java实现几种常见的排序算法

1、冒泡排序 从前往后让相邻位置的两个数字比较,这样可以把最大的或最小的放到末尾位置,如果最大的数字是在第一个位置,那么这个数字每次比较都会往后移动一位,直到末尾位置,其他数字同理。 public void bubbleSort(int a[]) { int i, j, t; for (i = 0; i < a.length - 1; i++) { for (j ...

俱往矣 350

用Java实现的几种常见排序算法

冒泡排序 冒泡排序的基本思想是:通过对待排序序列从前往后(从小标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使得值较大的元素逐渐从前往后移动,就像水底下的气泡一样逐渐向上冒。 优化:因为排序的过程中,各元素不断接近自己的位置,如果一趟比较下来没有进行过交换就说明序列有序。因此要在排序过程中设置一个flag判断元素是否进行过交换,从而减少不必要的比较 冒泡排序的特点: 长度为n的数组...

Hoshizola的博客 251

用Java实现几种常见的排序算法及SortUtil

转自:http://www.gdglc.com/v2/pages/root/viewdetail.asp?id=303用Java语言实现的各种排序,包括插入排序、冒泡排序、选择排序、Shell排序、快速排序、归并排序、堆排序、SortUtil等。 插入排序: package org.rut.util.algorithm.support; import org.rut.uti

Day day up! 2386

Java几种常见排序算法与代码实现

前言: 排序算法也算是每年校招、春招、社招都会问到的问题,虽然每次复习了就忘,但是也可以隔一段时间又拿出来看看。 其中,排序方式指,内部还是外部排序。只需要内部内存就可以的称为内部排序,数据量太大需要外部存储的称为外部排序。 这里只是几种常见的排序算法,更多的排序算法后期复习到再说。 冒泡排序 冒泡排序,是通过每一次遍历获取最大/最小值 将最大值/最小值放在尾部/头部 然后除...

Jason_Lee155的博客 278

java 实现几种常见的排序算法

包含了 冒泡,快速排序,选择排序,插入排序,希尔排序,堆排序, 归并排序,基数排序package Test;import java.util.ArrayList; import java.util.Arrays; import java.util.List;public class SortAny { public static void main(String[] args) {

请叫我王老魔 338
上一篇: 在Java程序中实现高精度打印
下一篇: 从女娲造人,看JAVA中"类"的应用
java169
博客等级 码龄19年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值