-
2022-03-02 17:00:59
设计思路
前端将同级下拖拽后,排好序的所有数据id集合传到后台接口,后台根据前端传入的id列表的顺序修改数据库的排序字段。
controller层代码
@ApiOperation(value = "排序 @author Tarzan Liu") @PostMapping("sort") public R<Boolean> sort(@RequestBody List<Long> ids) { return R.status(featureSetService.sort(ids)); }
Service层代码
/** * 方法描述: 排序 * * @param ids * @return {@link boolean} * @throws * @author tarzan * @date 2022年01月28日 17:56:25 */ public boolean sort(List<Long> ids) { List<FeatureSetEntity> updateList= new ArrayList<>(); for (int i = 0; i < ids.size(); i++) { updateList.add(FeatureSetEntity.builder().id(ids.get(i)).sort(i).build()); } return updateBatchById(updateList); }
maper类和实体类代码是常规代码不展示了!
如果你有更好的实现办法,欢迎交流 微信号:vxhqqh
更多相关内容 -
几种常用排序算法实现及耗时比较
2019-03-13 13:53:26包括冒泡排序,选择排序,插入排序,希尔排序,快速排序等常用排序算法的实现并耗时比较 -
java实现冒泡排序算法
2021-03-17 16:33:03java实现冒泡排序算法package ch01;public class BubbleSort{public static void main(String[] args){int[] values ={3,1,6,2,9,0,7,4,5};sort(values);for(int i=0; i < values.length; ++i){System.out....java实现冒泡排序算法
package ch01;
public class BubbleSort
{
public static void main(String[] args){
int[] values ={
3,1,6,2,9,0,7,4,5
};
sort(values);
for(int i=0; i < values.length; ++i){
System.out.println("Index: " + i + "Value: " + values[i]);
}
}
public static void sort(int[] values){
int temp;
for(int i=0 ; i < values.length ; ++i){
for(int j=0; j
if(values[j] > values[j + 1]){
temp = values[j];
values[j] = values[j + 1];
values[j + 1] = temp;
&n
相关文档:
每个Java应用都可以有自己的安全管理器,它是防范恶意攻击的主要安全卫士。安全管理器通过执行运行阶段检查和访问授权,以实施应用所需的安全策略,从而保护资源免受恶意操作的攻击。实际上,安全管理器根据Java安全策略文件决定将哪组权限授予类。然而,当不可信的类和第三方应用使用JVM时,Java安全管 ......
1.java过滤器对ext异步请求跳转
用户访问超时
解决两种情况下的用户访问超时。
a)普通http请求的session超时。
b)异步http请求的session超时,使用ext后大部分的界面刷新都是异步的ajax请求。
不管是那种类型的http请求总是可以由一个过滤器来捕捉。
分类:普通http请求的header参数中没有x-requested-with: ......
1.1 不用new关键词创建类的实例
用new关键词创建类的实例时,构造函数链中的所有构造函数都会被自动调用。但如果一个对象实现了Cloneable接口,我们可以调用它的clone()方法。clone()方法不会调用任何类构造函数。
在使用设计模式(Design Pattern)的场合,如果用Factory模式创建对象,则改用clone( ......
集合Collection接口
--Collection 是任何对象组,元素各自独立,通常拥有相同的套用规则。Set List由它派生。
基本操作 增加元素add(Object obj); addAll(Collection c);
删除元素 remove(Object obj); removeAll(Collection c);
求交集 retainAll(Collection c);
删除元素 remove(Object obj); removeAll(Collectio ......
Java生成图片验证码
import java.io.*;
import java.net.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.awt.*;
import java.awt.image.*;
import java.util.*;
import javax.imageio.*;
/**
*
* @author http://www.tot.name
* @version
*/
public cl ......
-
用java实现冒泡排序算法
2021-03-15 16:48:28两两比较待排序记录的关键字,发现两个记录的次序相反时即进行交换,直到没有反序的记录为止冒泡排序的算法分析与改进交换排序的基本思想是:两两比较待排序记录的关键字,发现两个记录的次序相反时即进行交换,直到...两两比较待排序记录的关键字,发现两个记录的次序相反时即进行交换,直到没有反序的记录为止
冒泡排序的算法分析与改进
交换排序的基本思想是:两两比较待排序记录的关键字,发现两个记录的次序相反时即进行交换,直到没有反序的记录为止。
应用交换排序基本思想的主要排序方法有:冒泡排序和快速排序。
public class BubbleSort implements SortUtil.Sort{
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);
}
}
}
}
冒泡排序
1、排序方法
将被排序的记录数组R[1..n]垂直排列,每个记录R看作是重量为R.key的气泡。根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R:凡扫描到违反本原则的轻气泡,就使其向上"飘浮"。如此反复进行,直到最后任何两个气泡都是轻者在上,重者在下为止。
(1)初始
R[1..n]为无序区。
(2)第一趟扫描
从无序区底部向上依次比较相邻的两个气泡的重量,若发现轻者在下、重者在上,则交换二者的位置。即依次比较(R[n],R[n-1]),(R[n-1],R[n-2]),…,(R[2],R[1]);对于每对气泡(R[j+1],R[j]),若R[j+1].key
第一趟扫描完毕时,"最轻"的气泡就飘浮到该区间的顶部,即关键字最小的记录被放在最高位置R[1]上。
(3)第二趟扫描
扫描R[2..n]。扫描完毕时,"次轻"的气泡飘浮到R[2]的位置上……
最后,经过n-1 趟扫描可得到有序区R[1..n]
注意:第i趟扫描时,R[1..i-1]和R[i..n]分别为当前的有序区和无序区。扫描仍是从无序区底部向上直至该区顶部。扫描完毕时,该区中最轻气泡飘浮到顶部位置R上,结果是R[1..i]变为新的有序区。
2、冒泡排序过程示例
对关键字序列为49 38 65 97 76 13 27 49的文件进行冒泡排序的过程
3、排序算法
(1)分析
因为每一趟排序都使有序区增加了一个气泡,在经过n-1趟排序之后,有序区中就有n-1个气泡,而无序区中气泡的重量总是大于等于有序区中气泡的重量,所以整个冒泡排序过程至多需要进行n-1趟排序。
若在某一趟排序中未发现气泡位置的交换,则说明待排序的无序区中所有气泡均满足轻者在上,重者在下的原则,因此,冒泡排序过程可在此趟排序后终止。为此,在下面给出的算法中,引入一个布尔量exchange,在每趟排序开始前,先将其置为FALSE。若排序过程中发生了交换,则将其置为TRUE。各趟排序结束时检查exchange,若未曾发生过交换则终止算法,不再进行下一趟排序。
(2)具体算法
void BubbleSort(SeqList R)
{ //R(l..n)是待排序的文件,采用自下向上扫描,对R做冒泡排序
int i,j;
Boolean exchange; //交换标志
for(i=1;i
exchange=FALSE; //本趟排序开始前,交换标志应为假
for(j=n-1;j>=i;j--) //对当前无序区R[i..n]自下向上扫描
if(R[j+1].key
R[0]=R[j+1]; //R[0]不是哨兵,仅做暂存单元
R[j+1]=R[j];
R[j]=R[0];
exchange=TRUE; //发生了交换,故将交换标志置为真
}
if(!exchange) //本趟排序未发生交换,提前终止算法
return;
} //endfor(外循环)
} //BubbleSort
4、算法分析
(1)算法的最好时间复杂度
若文件的初始状态是正序的,一趟扫描即可完成排序。所需的关键字比较次数C和记录移动次数M均达到最小值:
Cmin=n-1
Mmin=0。
冒泡排序最好的时间复杂度为O(n)。
(2)算法的最坏时间复杂度
若初始文件是反序的,需要进行n-1趟排序。每趟排序要进行n-i次关键字的比较(1≤i≤n-1),且每次比较都必须移动记录三次来达到交换记录位置。在这种情况下,比较和移动次数均达到最大值:
Cmax=n(n-1)/2=O(n2)
Mmax=3n(n-1)/2=O(n2)
冒泡排序的最坏时间复杂度为O(n2)。
(3)算法的平均时间复杂度为O(n2)
虽然冒泡排序不一定要进行n-1趟,但由于它的记录移动次数较多,故平均时间性能比直接插入排序要差得多。
(4)算法稳定性
冒泡排序是就地排序,且它是稳定的。
5、算法改进
上述的冒泡排序还可做如下的改进:
(1)记住最后一次交换发生位置lastExchange的冒泡排序
在每趟扫描中,记住最后一次交换发生的位置lastExchange,(该位置之前的相邻记录均已有序)。下一趟排序开始时,R[1..lastExchange-1]是有序区,R[lastExchange..n]是无序区。这样,一趟排序可能使当前有序区扩充多个记录,从而减少排序的趟数。具体算法【参见习题】。
(2) 改变扫描方向的冒泡排序
①冒泡排序的不对称性
能一趟扫描完成排序的情况:
只有最轻的气泡位于R[n]的位置,其余的气泡均已排好序,那么也只需一趟扫描就可以完成排序。
【例】对初始关键字序列12,18,42,44,45,67,94,10就仅需一趟扫描。
需要n-1趟扫描完成排序情况:
当只有最重的气泡位于R[1]的位置,其余的气泡均已排好序时,则仍需做n-1趟扫描才能完成排序。
【例】对初始关键字序列:94,10,12,18,42,44,45,67就需七趟扫描。
②造成不对称性的原因
每趟扫描仅能使最重气泡"下沉"一个位置,因此使位于顶端的最重气泡下沉到底部时,需做n-1趟扫描。
③改进不对称性的方法
在排序过程中交替改变扫描方向,可改进不对称性。
JAVA代码:
package Utils.Sort;
/**
*@author Linyco
*利用冒泡排序法对数组排序,数组中元素必须实现了Comparable接口。
*/
public class BubbleSort implements SortStrategy
{
/**
*对数组obj中的元素以冒泡排序算法进行排序
*/
public void sort(Comparable[] obj)
{
if (obj == null)
{
throw new NullPointerException("The argument can not be null!");
}
Comparable tmp;
for (int i = 0 ;i < obj.length ;i++ )
{
//切记,每次都要从第一个开始比。最后的不用再比。
for (int j = 0 ;j < obj.length - i - 1 ;j++ )
{
//对邻接的元素进行比较,如果后面的小,就交换
if (obj[j].compareTo(obj[j + 1]) > 0)
{
tmp = obj[j];
obj[j] = obj[j + 1];
obj[j + 1] = tmp;
}
}
}
}
}
-
Java实现按照大小写字母顺序排序的方法
2020-08-28 12:53:34主要介绍了Java实现按照大小写字母顺序排序的方法,涉及java数组遍历、编码转换、判断等相关操作技巧,需要的朋友可以参考下 -
Java对象排序、中文排序、SortedSet排序使用和源码讲解
2020-12-22 19:38:04在C、C++中有很多排序算法,但是通常排序算法不得不让程序员在写代码的过程中陷入对底层很多指针和位置的理解,java不希望这样,所以排序大多可以由java帮你做掉,例如,你要对一个数组排序,通过:Collections.sort... -
Java股票分析排序
2018-12-12 11:31:18现有股票数据XX条,无序...注意:实现排序算法可以使用冒泡排序,插入排序,堆排序,选择排序,快速排序等,任何的排序算法都是可以被接受的,但不能使用系统库中自带的排序函数,如List.sort() 或者 Arrays.sort()。 -
java JDK中Arrays.sort的排序算法分析
2019-02-18 18:44:351、常见的排序算法 常见的排序算法有选择排序、插入排序、冒泡排序等基本的排序算法 高级一点的排序算法有快速排序算法,核心思想是从数组中挑选一个元素,使这个元素在正确的位置,比如左边的元素都不大于它,...1、常见的排序算法
常见的排序算法有选择排序、插入排序、冒泡排序等基本的排序算法
高级一点的排序算法有快速排序算法,核心思想是从数组中挑选一个元素,使这个元素在正确的位置,比如左边的元素都不大于它,右边的元素都不小于它,一次递归,到最后子数组的大小为2或为1的时候,子数组有有序了,整个大数组就有序了。
归并排序算法,核心思想是将两个有序的数组的数组合并成一个数组。
希尔算法,整个算法比较特殊,就是算法的复杂度不是很确定。
详见 我的项目 https://gitee.com/dahaizhenqiang/algorithms-learn4.git
2.jdk中的算法
在jdk排序的时候,常见的就是Collections.sort() 和Arrays.sort()这两个静态方法,首先我们看Collections.sort(),一下jdk源码是jdk1.8
@SuppressWarnings({"unchecked", "rawtypes"}) public static <T> void sort(List<T> list, Comparator<? super T> c) { list.sort(c); }
Comparator接口是需要自己实现的,list中的元素根据compare()方法来排序,该方法调用的的是list.sort();继续跟进
@SuppressWarnings({"unchecked", "rawtypes"}) default void sort(Comparator<? super E> c) { Object[] a = this.toArray(); Arrays.sort(a, (Comparator) c); ListIterator<E> i = this.listIterator(); for (Object e : a) { i.next(); i.set((E) e); } }
发现最终调用的也是Arrays.sort()方法,所以下面我们重点看Arrays.sort()方法,经断点调试,对Arraylist<String>进行排序
会进入到一下的方法
public static <T> void sort(T[] a, Comparator<? super T> c) { if (c == null) { sort(a); } else { if (LegacyMergeSort.userRequested) legacyMergeSort(a, c); else TimSort.sort(a, 0, a.length, c, null, 0, 0); } }
其中传统的legcyMergeSort.userRequest的开关默认为false,我们看看legacyMergeRequest();
@SuppressWarnings({"rawtypes", "unchecked"}) private static void mergeSort(Object[] src, Object[] dest, int low, int high, int off, Comparator c) { int length = high - low; // Insertion sort on smallest arrays if (length < INSERTIONSORT_THRESHOLD) { for (int i=low; i<high; i++) for (int j=i; j>low && c.compare(dest[j-1], dest[j])>0; j--) swap(dest, j, j-1); return; } // Recursively sort halves of dest into src int destLow = low; int destHigh = high; low += off; high += off; int mid = (low + high) >>> 1; mergeSort(dest, src, low, mid, -off, c); mergeSort(dest, src, mid, high, -off, c); // If list is already sorted, just copy from src to dest. This is an // optimization that results in faster sorts for nearly ordered lists. if (c.compare(src[mid-1], src[mid]) <= 0) { System.arraycopy(src, low, dest, destLow, length); return; } // Merge sorted halves (now in src) into dest for(int i = destLow, p = low, q = mid; i < destHigh; i++) { if (q >= high || p < mid && c.compare(src[p], src[q]) <= 0) dest[i] = src[p++]; else dest[i] = src[q++]; } }
当需要排序的数组比较小的时候,直接采用Insertion sort on smallest arrays插入排序算法,下面的就是基于递归的归并算法了。
默认情况下调用的不是legacyMergeRequest(),而是调用 TimSort.sort(a, 0, a.length, c, null, 0, 0);代码如下
static <T> void sort(T[] a, int lo, int hi, Comparator<? super T> c, T[] work, int workBase, int workLen) { assert c != null && a != null && lo >= 0 && lo <= hi && hi <= a.length; int nRemaining = hi - lo; if (nRemaining < 2) return; // Arrays of size 0 and 1 are always sorted // If array is small, do a "mini-TimSort" with no merges if (nRemaining < MIN_MERGE) { int initRunLen = countRunAndMakeAscending(a, lo, hi, c); binarySort(a, lo, hi, lo + initRunLen, c); return; } /** * March over the array once, left to right, finding natural runs, * extending short natural runs to minRun elements, and merging runs * to maintain stack invariant. */ TimSort<T> ts = new TimSort<>(a, c, work, workBase, workLen); int minRun = minRunLength(nRemaining); do { // Identify next run int runLen = countRunAndMakeAscending(a, lo, hi, c); // If run is short, extend to min(minRun, nRemaining) if (runLen < minRun) { int force = nRemaining <= minRun ? nRemaining : minRun; binarySort(a, lo, lo + force, lo + runLen, c); runLen = force; } // Push run onto pending-run stack, and maybe merge ts.pushRun(lo, runLen); ts.mergeCollapse(); // Advance to find next run lo += runLen; nRemaining -= runLen; } while (nRemaining != 0); // Merge all remaining runs to complete sort assert lo == hi; ts.mergeForceCollapse(); assert ts.stackSize == 1; }
当数组中的元素个数比较小的时候这里是个数小于32时,调用binarySort()方法,注意这个算法并不是二叉树推排序,
而是折半插入排序,
@SuppressWarnings("fallthrough") private static <T> void binarySort(T[] a, int lo, int hi, int start, Comparator<? super T> c) { assert lo <= start && start <= hi; if (start == lo) start++; for ( ; start < hi; start++) { T pivot = a[start]; // Set left (and right) to the index where a[start] (pivot) belongs int left = lo; int right = start; assert left <= right; /* * Invariants: * pivot >= all in [lo, left). * pivot < all in [right, start). */ while (left < right) { int mid = (left + right) >>> 1; if (c.compare(pivot, a[mid]) < 0) right = mid; else left = mid + 1; } assert left == right; /* * The invariants still hold: pivot >= all in [lo, left) and * pivot < all in [left, start), so pivot belongs at left. Note * that if there are elements equal to pivot, left points to the * first slot after them -- that's why this sort is stable. * Slide elements over to make room for pivot. */ int n = start - left; // The number of elements to move // Switch is just an optimization for arraycopy in default case switch (n) { case 2: a[left + 2] = a[left + 1]; case 1: a[left + 1] = a[left]; break; default: System.arraycopy(a, left, a, left + 1, n); } a[left] = pivot; } }
设有一个序列a[0],a[1]...a[n];其中a[i-1]前是已经有序的,当插入时a[i]时,利用二分法搜索a[i]插入的位置,即插入的数组是有一个基本有序的数组。
而TimSort.sort()整体上为了减少对升序部分的回溯和对降序部分的性能倒退,将输入按其升序和降序特点进行了分区。排序的输入的单位不是一个个单独的数字,而是一个个的块-分区。其中每一个分区叫一个run。针对这些 run 序列,每次拿一个 run 出来按规则进行合并。每次合并会将两个 run合并成一个 run。合并的结果保存到栈中。合并直到消耗掉所有的 run,这时将栈上剩余的 run合并到只剩一个 run 为止。这时这个仅剩的 run 便是排好序的结果,总结就是合并算法的插入算法的结合。
更加详细的timSort排序算法的信息查看 https://blog.csdn.net/yangzhongblog/article/details/8184707
3.总结,算法很多,对于实际的程序应用情况,往往不会单纯的只用一种排序算法,而是多个排序算法的优化和结合,这就是算法知识的应用吧
-
初级java笔试题-Sorting-Algorithm-Analysis:七种排序算法的简单分析
2021-06-03 01:56:03初级java笔试题排序算法分析 排序元组 七种排序算法的简单分析 介绍 1998 年,唐纳德·克努斯 (Donald Knuth) 在他的《计算机编程艺术》第 3 卷:排序和搜索中表示,“编程的几乎每个重要方面都出现在排序或搜索的... -
java竞赛中各种自定义排序模板
2020-12-22 11:46:25java没有结构体,所以在算法竞赛中有时候对于有多个属性属于同一个事物,这时候就要创建一个类来存储,而算法竞赛中往往有多个数据,所以要用对象数组来存储。如果要按照某一个属性来对这个对象数组进行升序或降序... -
可扩展的快速排序算法
2014-06-09 18:00:41采用java语言编写的可扩展快速排序算法。 资源简介: Array.java(数组接口), SortArray.java(Array的实现类,可扩展), SortVector.java(承载Array,并使用快速排序算法对数组进行排序) SortTest.java(测试类... -
JAVA内部排序算法汇总
2008-04-02 17:46:06为了总结学习资料,特此整理一下...定义排序的接口:Sort public interface Sort { int[] datas = {0,12,32,45,2,13,57,29,11,34,21,42,15,90}; int length =datas.length; public void sort(); public void publish(); } -
六大排序算法(java实现)
2022-02-13 13:42:57Java提供了Comparable接口用来定义排序规则,只要求实现一个compareTo方法 此接口强行对实现它的每个类的对象进行整体排序。此排序被称为该类的自然排序 ,类的 compareTo 方法被称为它的自然比较方法 。实现此接口... -
选择排序算法Java实现
2018-07-18 13:37:47选择排序的基本思想是首先找到数组中最小的那一个元素,然后再将该元素与数组中的第一个元素交换位置。...public class Selection { //选择排序算法,升序 public static void sort(Comparable[] a) {... -
visual-sort:一个可视化排序算法(或任何数组操作)的 Java 框架。 可用作比较不同方法的教具
2021-06-24 11:22:09概要:一个简单的 Java 框架,允许用户在排序(或以其他方式处理)时可视化整数元素数组。 允许用户通过接口定义自己的算法来处理数组。 添加一名作者 版本:0.2 日期:2015/02/16 用法:创建一个 VisualSort ... -
Md5Utils(接口防篡改算法).java
2021-01-27 20:15:37加签、验签是用来解决防篡改问题的,将排序后的参数与其对应值,组合成“参数=参数值”的格式,并且把这些参数用&字符连接起来,此时生成的字符串为待摘要字符串。 -
快速排序算法详细图解
2020-08-21 17:37:08排序算法非常多,几乎每个人学的第一个排序算法都是冒泡算法,但是冒泡算法的时间复杂度是很高的,是一种效率很低的算法。而目前来说,快速排序是相对比较好的一种算法:实现难度低,时间复杂度低。但快速排序在一些... -
Java中自带的排序算法Arrays.sort()和Collections.sort()
2019-04-16 16:29:01如果我们需要对一个基本类型数组进行排序,我们可以使用Arrays.sort()方法,不过只能升序; 如果我们需要排序一个对象列表List,我们可以使用Collection.sort()方法或者ArrayList自带的sort方法; Arrays.sort... -
Java自带的排序函数归纳总结
2022-02-11 00:21:45Java中强大的jdk给我们提供了许多现成能使用的排序算法 ...... -
Java 对象排序完整版
2020-11-24 20:54:43在 Java 中,基本使用两种方法,即 Comparator 和 Comparable 接口,来完成基本甚至稍微复杂一点的排序的任务。当然,面对不同的数据结构,如数组(Array)、集合(Set)或映射(Map),排序的实现方式稍有不同。 要... -
data-structures:高中数据结构课的数据结构和排序算法
2021-07-06 23:17:53Sort.java包含合并冒泡排序算法,即mergeSort()和bubbleSort() 。 它还包含用于测试目的的randomArray(int size) 。 DuhList.java 一种基于数组的数据结构,其功能类似于 ArrayList。 它利用泛型并实现IList.java... -
JAVA--基于策略模式几种排序算法的实现
2018-04-03 20:11:49进来学习了设计模式,这里使用策略模式来组织多种排序算法。 首先我们定义一个抽象类,OrderBase,数据的输入,展示部分在抽象类里实现,具体的排序逻辑在各个子类里实现。 为什么用抽象类不用接口?接口... -
Java排序算法实现方式(算法思路 过程动图)
2019-10-15 16:33:07待排序的元素需要实现 Java 的 Comparable 接口,该接口有 compareTo() 方法,可以用它来判断两个元素的大小关系。 使用辅助函数 less() 和 swap() 来进行比较和交换的操作,使得代码的可读性和可移植性更好。 敲... -
JAVA默认排序算法问题
2014-02-06 11:11:071. 为什么写这篇文章 这篇文章的根源是在产品中发现了一个诡异的bug:只能在产品环境下重现,在我的本地开发环境...Exception in thread "main" java.lang.IllegalArgumentException: Comparison method violates -
java堆排序算法(小根堆)
2016-12-30 20:33:10这几天学习堆排序算法,主要是引用老师的方法进行编写的,通过多线程和管道通信(即java的PipedInputStream和PipedOutputStream)来实现大量数据的排序 1、首先是将数据分割成nsorters(16、32、64、……)块,对每... -
Java数据结构和算法中文第二版源码
2015-09-01 12:02:09类接口 Ordered专题applet 有序数组的Java代码 对数 存储对象 大O表示法 为什么不用数组表示一切? 小结 问题 实验 编程作业 第3章 简单排序 如何排序? 冒泡排序 选择排序 插入排序 对象排序 几种简单排序之间的... -
Java集合排序(看完秒懂)
2021-02-27 20:53:26比如将一个List排序,则有两种方式:1:Student实现Comparable接口:2:给排序方法传递一个Comparator参数:请看下面的举例:Student类:package demo;//Student实现Comparable,需要实现compareTo方法public class ... -
java实现自定义排序(实现Comparable接口)
2018-07-20 18:30:11排序的算法,大家都不陌生,有冒泡排序、选择排序、插入排序,快速排序等等。如果现在有学生类,学校添加了很多学生,要你给学生按照学号大小排序,你会怎么排? 学生类 Student {int stuID; String stuName; int ... -
几种排序算法的稳定性分析
2019-06-25 12:07:02为什么要对排序算法提出稳定性的要求? 简单的举个小例子:比如我们班一次期末考试,分高的在前面,对于分数相同的学生的排名需要借助上次考试结果,上次分数高的在前面,那么这个时候就要使用稳定排序。 ... -
最快的排序算法是什么
2020-09-26 09:19:00最快的排序算法是什么,很多人的第一反应是快排,感觉QuickSort 当然应该最快了,其实并非如此,快排是不稳定的,最坏情况下,快排序并不是最优,Java7 中引入的 TimSort 就是一个结合了插入排序和归并排序的高效...