java的几种排序方式
java稳定的排序方法

java稳定的排序方法
Java是一种广泛使用的编程语言,其中排序是常见的操作。
在排序中,稳定性是一个重要的概念。
稳定的排序算法可以保留相等元素的原始顺序,而不稳定的排序算法不保证这一点。
下面介绍几种Java中稳定的排序方法:
1. 冒泡排序:该算法的基本思想是通过交换相邻的元素来将较大的元素逐步“冒泡”到数组的末尾。
冒泡排序是一种简单但效率较低的排序算法,时间复杂度为O(n^2)。
2. 插入排序:该算法的基本思想是将数组分为有序和无序两部分,从无序部分依次取出一个元素插入到有序部分的适当位置。
插入排序的时间复杂度也是O(n^2),但在实际应用中,它比冒泡排序更常用。
3. 归并排序:该算法的基本思想是将待排序数组分成两个子数组,并将每个子数组递归地进行排序,然后再将它们合并成一个有序数组。
归并排序的时间复杂度为O(nlogn),但它需要额外的空间来存储子数组。
4. 堆排序:该算法的基本思想是将待排序数组构建为一个最大堆(或最小堆),然后不断取出堆顶元素并重新调整堆,直到所有元素都被取出。
堆排序的时间复杂度为O(nlogn),但也需要额外的空间来存储堆。
总的来说,以上排序方法都是稳定的。
在实际应用中,我们需要根据数据规模、数据类型和性能需求等因素来选择适当的排序算法。
java8 list 排序方法

java8 list 排序方法Java 8中的List排序是一种排序列表的方法,允许程序员利用多种静态和实例方法来对所有可能的列表进行排序,其中包括链表、阵列和泛型捕获列表。
1、比较器排序:比较器排序是在Java 8中极其常见的排序方法,它用来在列表中比较元素的特定属性,例如它们的大小或其他标准,来使列表以特定的顺序排列。
2、递归排序:递归排序是一种排序列表的技术,它将列表不断分割,然后对每个分段进行排序,最终将每个段的元素合并。
它在Java 8中可以使用Collections类对列表字段进行排序。
3、算法排序:算法排序是一种利用排序算法来操作列表元素的技术,它仅适用于特定情况,例如旋转列表中的数据以提高性能。
在Java 8中,开发人员可以使用两种排序算法,即归并排序和快速排序。
4、排序工厂:在Java 8中,排序工厂是一种非常有用的排序方法,它可以根据用户提供的排序要求自动完成列表元素的排序操作,而不用在代码中实现每一步操作。
5、定制排序:定制排序是允许开发人员根据自己的命名条件来排列列表元素的灵活技术,Java 8中有一个实用程序类,可让用户以正确的列表顺序对元素进行排序,而无需任何额外的参数指定。
6、元素索引排序:元素索引排序是通过给每个元素定义一个唯一的索引值来根据特定索引排列列表元素的方法,这种排序方法可以非常有效地根据列表中的不同元素进行排列。
7、Stream API排序:Stream API排序是在Java 8中非常受欢迎的一种排序方法,它将简单的排序组合在一起并返回结果,这一功能可以在无需重写比较器的情况下完成排序,而不必担心性能问题。
它可以很容易地将元素按照指定条件进行排序。
java算法总结

java算法总结一、排序1、冒泡排序:t冒泡排序是一种简单的排序算法,它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。
走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。
2、选择排序:t选择排序是一种简单直观的排序算法,无论什么数据进去都是O(n)的时间复杂度。
所以用到它的时候,数据规模越小越好。
唯一的好处可能就是不占用额外的内存空间了吧。
3、插入排序:t插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法。
它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
4、希尔排序:t希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。
希尔排序是非稳定排序算法。
该方法的基本思想是:先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行依次直接插入排序。
二、查找1、线性查找:t线性查找又称顺序查找,是一种最简单的查找算法。
从数据结构线形表的一端开始,顺序扫描,依次将扫描到的结点关键字与给定值k相比较,若相等则查找成功;若扫描结束仍没有找到关键字等于k的结点,则表示表中不存在关键字等于k的结点,查找失败。
2、二分查找:t二分查找又称折半查找,要求待查找的序列有序。
每次取中间位置的值与待查关键字比较,如果中间位置的值更大,则在前半部分循环这个查找的过程,如果中间位置的值更小,则在后半部分循环这个查找的过程。
3、二叉查找树:t二叉查找树(Binary Search Tree,简称BST),又被称为二叉搜索树、有序二叉树。
它是一棵空树或者是具有下列性质的二叉树:若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值;任意节点的左、右子树也分别为二叉查找树;没有键值相等的节点三、字符串处理1、KMP算法:tKMP算法是由Donald E.Knuth、Vaughn R. Pratt和James H.Morris三人于1977年提出的一种改进的字符串匹配算法,它利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。
java倒序排序方法

java倒序排序方法java语言是一种面向对象的编程语言,具有强大的排序功能。
在java中,倒序排序是非常常见的操作,有多种实现方法。
一、使用Collections.reverseOrder()方法java中的Collections类提供了reverseOrder()方法,可以用于倒序排序,该方法返回一个比较器,可以将一个对象列表按照指定的顺序进行排序。
示例代码如下所示:```javaimport java.util.ArrayList;import java.util.Collections;import java.util.List;public class ReverseSortExample {public static void main(String[] args) {List<Integer> numbers = new ArrayList<>();numbers.add(5);numbers.add(2);numbers.add(9);numbers.add(1);numbers.add(7);System.out.println("排序前:" + numbers); Collections.sort(numbers, Collections.reverseOrder()); System.out.println("排序后:" + numbers);}}```输出结果如下所示:```排序前:[5, 2, 9, 1, 7]排序后:[9, 7, 5, 2, 1]```在这个示例中,我们创建了一个包含一些整数的列表,并使用Collections类的sort()方法对其进行排序。
通过传递`Collections.reverseOrder()`作为比较器参数,可以实现倒序排序。
值得注意的是,reverseOrder()方法返回的是一个比较器,它会根据元素的自然顺序进行排序。
java常用算法和数据结构

java常用算法和数据结构Java是一种面向对象的编程语言,它具有丰富的算法库和数据结构库,为开发人员提供了许多常用的算法和数据结构。
下面将介绍一些Java常用的算法和数据结构。
1.排序算法-冒泡排序(Bubble Sort):比较相邻的两个元素,如果顺序错误则交换位置,重复该过程直到整个序列有序。
-插入排序(Insertion Sort):将数组分为已排序和未排序两部分,每次从未排序部分取出一个元素,插入到已排序部分合适的位置。
-选择排序(Selection Sort):每次从未排序部分选择最小(或最大)的元素,放到已排序部分的末尾。
-快速排序(Quick Sort):选择一个基准元素,将数组分为两部分,小于基准的放左边,大于基准的放右边,递归地对左右两部分进行快速排序。
-归并排序(Merge Sort):将数组分为两部分,分别对每个子数组进行排序,然后合并两个有序子数组。
2.搜索算法-二分查找(Binary Search):对有序数组进行查找,每次将查找范围缩小一半。
-广度优先搜索(BFS):以树或图的形式搜索,从根节点开始,逐层扩展搜索范围,直到找到目标节点。
-深度优先搜索(DFS):以树或图的形式搜索,从根节点开始,逐个访问节点的所有邻居节点,直到找到目标节点或搜索完所有节点。
3.数据结构-数组(Array):一组按顺序存储的相同类型元素的集合,通过索引访问元素,可以快速访问元素,但插入和删除元素较慢。
-链表(Linked List):一组通过指针连接的节点存储的元素的集合,支持灵活的插入和删除操作,但访问元素较慢。
-栈(Stack):一种特殊的线性数据结构,遵循先进后出(LIFO)原则,只能在栈顶进行插入和删除操作。
-队列(Queue):一种特殊的线性数据结构,遵循先进先出(FIFO)原则,在队尾插入元素,队头删除元素。
-堆(Heap):一种特殊的树形数据结构,可以快速找到最小(或最大)元素,常用于实现优先队列。
java中的按字典排序方法

java中的按字典排序方法在Java中,可以使用不同的方法对字符串进行字典排序。
下面将介绍几种用于字典排序的常见方法。
1. 字符串数组排序如果有一个字符串数组需要进行字典排序,可以使用Arrays类中的sort()方法进行排序。
这个方法使用的是快速排序算法,可以对字符串数组按字典顺序进行排序。
例如:javaimport java.util.Arrays;public class DictionarySort {public static void main(String[] args) {String[] words = {"java", "c++", "python", "ruby"};字典排序Arrays.sort(words);输出排序结果for (String word : words) {System.out.println(word);}}}输出结果为:c++javapythonruby2. 字符串列表排序如果有一个字符串列表需要进行字典排序,也可以使用Collections类中的sort()方法进行排序。
这个方法使用的是归并排序算法,可以对字符串列表按字典顺序进行排序。
例如:javaimport java.util.ArrayList;import java.util.Collections;public class DictionarySort {public static void main(String[] args) {ArrayList<String> words = new ArrayList<>();words.add("java");words.add("c++");words.add("python");words.add("ruby");字典排序Collections.sort(words);输出排序结果for (String word : words) {System.out.println(word);}}}输出结果为:c++javapythonruby3. 自定义比较器排序如果想要根据自定义规则进行字典排序,可以实现Comparator接口并重写compare()方法。
用Java实现常见的8种内部排序算法

⽤Java实现常见的8种内部排序算法⼀、插⼊类排序插⼊类排序就是在⼀个有序的序列中,插⼊⼀个新的关键字。
从⽽达到新的有序序列。
插⼊排序⼀般有直接插⼊排序、折半插⼊排序和希尔排序。
1. 插⼊排序1.1 直接插⼊排序/*** 直接⽐较,将⼤元素向后移来移动数组*/public static void InsertSort(int[] A) {for(int i = 1; i < A.length; i++) {int temp = A[i]; //temp ⽤于存储元素,防⽌后⾯移动数组被前⼀个元素覆盖int j;for(j = i; j > 0 && temp < A[j-1]; j--) { //如果 temp ⽐前⼀个元素⼩,则移动数组A[j] = A[j-1];}A[j] = temp; //如果 temp ⽐前⼀个元素⼤,遍历下⼀个元素}}/*** 这⾥是通过类似于冒泡交换的⽅式来找到插⼊元素的最佳位置。
⽽传统的是直接⽐较,移动数组元素并最后找到合适的位置*/public static void InsertSort2(int[] A) { //A[] 是给定的待排数组for(int i = 0; i < A.length - 1; i++) { //遍历数组for(int j = i + 1; j > 0; j--) { //在有序的序列中插⼊新的关键字if(A[j] < A[j-1]) { //这⾥直接使⽤交换来移动元素int temp = A[j];A[j] = A[j-1];A[j-1] = temp;}}}}/*** 时间复杂度:两个 for 循环 O(n^2)* 空间复杂度:占⽤⼀个数组⼤⼩,属于常量,所以是 O(1)*/1.2 折半插⼊排序/** 从直接插⼊排序的主要流程是:1.遍历数组确定新关键字 2.在有序序列中寻找插⼊关键字的位置* 考虑到数组线性表的特性,采⽤⼆分法可以快速寻找到插⼊关键字的位置,提⾼整体排序时间*/public static void BInsertSort(int[] A) {for(int i = 1; i < A.length; i++) {int temp = A[i];//⼆分法查找int low = 0;int high = i - 1;int mid;while(low <= high) {mid = (high + low)/2;if (A[mid] > temp) {high = mid - 1;} else {low = mid + 1;}}//向后移动插⼊关键字位置后的元素for(int j = i - 1; j >= high + 1; j--) {A[j + 1] = A[j];}//将元素插⼊到寻找到的位置A[high + 1] = temp;}}2. 希尔排序希尔排序⼜称缩⼩增量排序,其本质还是插⼊排序,只不过是将待排序列按某种规则分成⼏个⼦序列,然后如同前⾯的插⼊排序⼀般对这些⼦序列进⾏排序。
hutool排序方法

hutool排序方法Hutool是Java开发中常用的工具类库,提供了丰富实用的工具方法,其中包括排序方法。
本文将介绍Hutool中的排序方法,并对其进行详细解析。
一、Hutool简介Hutool是一个Java工具类库,致力于提供一些常用的工具方法,以简化Java开发过程中的一些操作。
Hutool使用简单,功能强大,并且具有良好的文档和示例,被广泛应用于Java开发领域。
二、Hutool排序方法Hutool提供了多种排序方法,可以满足不同场景下的排序需求。
下面将介绍其中几种常用的排序方法。
1. 冒泡排序(BubbleSort)冒泡排序是一种简单直观的排序算法,它重复地遍历要排序的元素,比较相邻的两个元素,如果顺序错误则交换两个元素的位置,直到没有需要交换的元素为止。
冒泡排序的时间复杂度为O(n^2)。
2. 快速排序(QuickSort)快速排序是一种高效的排序算法,它采用分治的思想,通过一趟排序将待排序的记录分割成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,然后分别对这两部分记录进行排序,递归地进行,直到整个序列有序。
快速排序的时间复杂度为O(nlogn)。
3. 归并排序(MergeSort)归并排序是一种稳定的排序算法,它采用分治的思想,将待排序的序列分成若干个子序列,分别对每个子序列进行排序,然后再将排好序的子序列合并成一个有序序列。
归并排序的时间复杂度为O(nlogn)。
4. 插入排序(InsertionSort)插入排序是一种简单直观的排序算法,它将待排序的序列分成已排序和未排序两部分,每次从未排序的部分取出一个元素,插入到已排序的部分的适当位置,直到所有元素都插入完毕。
插入排序的时间复杂度为O(n^2)。
5. 选择排序(SelectionSort)选择排序是一种简单直观的排序算法,它将待排序的序列分成已排序和未排序两部分,每次从未排序的部分选择最小的元素,放到已排序的部分的末尾,直到所有元素都放入已排序的部分。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
java的几种排序方式用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;//swapSortUtil.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) {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);//partitionl=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=data;}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++];elsedata[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);elseinsertSort(data, l, mid - l + 1);if ((r - mid) >THRESHOLD)mergeSort(data, temp, mid + 1, r);elseinsertSort(data, mid + 1, r - mid);for (i = l; i <= mid; i++) {temp = data;}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;a = temp;} 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;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);}//fixdownprivate 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;data = data[j];data[j] = temp;}}。