几种常见排序算法(Java实现)
- 格式:docx
- 大小:28.18 KB
- 文档页数:6
java稳定的排序方法
Java是一种广泛使用的编程语言,其中排序是常见的操作。
在排序中,稳定性是一个重要的概念。
稳定的排序算法可以保留相等元素的原始顺序,而不稳定的排序算法不保证这一点。
下面介绍几种Java中稳定的排序方法:
1. 冒泡排序:该算法的基本思想是通过交换相邻的元素来将较大的元素逐步“冒泡”到数组的末尾。
冒泡排序是一种简单但效率较低的排序算法,时间复杂度为O(n^2)。
2. 插入排序:该算法的基本思想是将数组分为有序和无序两部分,从无序部分依次取出一个元素插入到有序部分的适当位置。
插入排序的时间复杂度也是O(n^2),但在实际应用中,它比冒泡排序更常用。
3. 归并排序:该算法的基本思想是将待排序数组分成两个子数组,并将每个子数组递归地进行排序,然后再将它们合并成一个有序数组。
归并排序的时间复杂度为O(nlogn),但它需要额外的空间来存储子数组。
4. 堆排序:该算法的基本思想是将待排序数组构建为一个最大堆(或最小堆),然后不断取出堆顶元素并重新调整堆,直到所有元素都被取出。
堆排序的时间复杂度为O(nlogn),但也需要额外的空间来存储堆。
总的来说,以上排序方法都是稳定的。
在实际应用中,我们需要根据数据规模、数据类型和性能需求等因素来选择适当的排序算法。
javalist随机排序的方法我们需要明确List是Java中的一种数据结构,它可以存储多个元素,并且按照插入的顺序进行排序。
然而,有时候我们需要对List 中的元素进行随机排序,以满足特定的需求。
Java提供了多种方法来实现List的随机排序,下面将介绍其中的几种常用方法。
方法一:使用Collections.shuffle()方法Collections类是Java中的工具类,提供了一系列静态方法来操作集合类。
其中,shuffle()方法可以随机打乱List中的元素顺序。
使用该方法的步骤如下:1. 导入java.util.Collections类。
2. 创建一个List对象,并向其中添加元素。
3. 调用Collections.shuffle()方法对List进行随机排序。
4. 遍历打印排序后的List。
示例代码如下所示:```import java.util.ArrayList;import java.util.Collections;import java.util.List;public class RandomSortList {public static void main(String[] args) {List<Integer> list = new ArrayList<>(); list.add(1);list.add(2);list.add(3);list.add(4);list.add(5);System.out.println("排序前:" + list); Collections.shuffle(list);System.out.println("排序后:" + list); }}```运行该代码,可以得到如下输出结果:```排序前:[1, 2, 3, 4, 5]排序后:[3, 2, 4, 1, 5]```方法二:使用自定义算法实现除了使用Collections类提供的shuffle()方法外,我们还可以使用自定义算法来实现List的随机排序。
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中的sort方法一、概述Java中的sort方法是一种常用的排序算法,用于对数组或列表进行排序。
sort方法在不同的数据结构中实现,如Arrays类和Collections类中的sort方法。
这些方法提供了高效的排序算法,如快速排序、归并排序等。
二、sort方法的使用1. Arrays类中的sort方法Arrays类中的sort方法可以对数组进行排序。
使用该方法时,需要将要排序的数组作为参数传递给sort方法。
例如:```javaint[] arr = {3, 1, 4, 1, 5, 9, 2, 6};Arrays.sort(arr);```这将按照升序对数组进行排序。
2. Collections类中的sort方法Collections类中的sort方法可以对列表进行排序。
使用该方法时,需要将要排序的列表作为参数传递给sort方法。
例如:```javaList<Integer> list = new ArrayList<>();list.add(3);list.add(1);list.add(4);list.add(1);list.add(5);list.add(9);list.add(2);list.add(6);Collections.sort(list);```这将按照升序对列表进行排序。
需要注意的是,Collections类中的sort方法默认按照自然顺序进行排序,如果需要按照自定义顺序进行排序,需要实现Comparator接口或使用Lambda表达式传递给sort方法。
三、自定义排序规则如果要对列表按照自定义顺序进行排序,可以使用Comparator接口或Lambda表达式传递给sort方法。
Comparator接口定义了compare方法,用于比较两个对象的大小关系。
Lambda表达式可以更简洁地表示比较逻辑。
例如:使用Lambda表达式:```javaList<String> list = new ArrayList<>();list.add("apple");list.add("banana");list.add("orange");Collections.sort(list, (s1, s2) -> s1.length() -s2.length());```这将按照字符串长度的升序对列表进行排序。
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面试题经典算法经典算法在Java面试中经常被问及,因为它们可以展示面试者对基本数据结构和算法的理解程度。
以下是一些经典算法,我会逐个介绍它们。
1. 冒泡排序(Bubble Sort),这是一种简单的排序算法,它重复地走访要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。
时间复杂度为O(n^2)。
2. 快速排序(Quick Sort),快速排序使用分治法策略来把一个序列分为两个子序列。
它是一种分而治之的算法,时间复杂度为O(nlogn)。
3. 二分查找(Binary Search),二分查找是一种在有序数组中查找某一特定元素的搜索算法。
时间复杂度为O(logn)。
4. 递归算法(Recursion),递归是指在函数的定义中使用函数自身的方法。
递归算法通常用于解决可以被分解为相同问题的子问题的情况。
5. 动态规划(Dynamic Programming),动态规划是一种在数学、计算机科学和经济学中使用的一种方法。
它将问题分解为相互重叠的子问题,通过解决子问题的方式来解决原始问题。
6. 深度优先搜索(Depth-First Search)和广度优先搜索(Breadth-First Search),这两种搜索算法通常用于图的遍历和搜索。
深度优先搜索使用栈来实现,而广度优先搜索则使用队列来实现。
以上是一些常见的经典算法,当然还有很多其他的算法,如贪心算法、Dijkstra算法、KMP算法等等。
在面试中,除了了解这些算法的原理和实现方式之外,还需要能够分析算法的时间复杂度、空间复杂度以及适用场景等方面的知识。
希望这些信息能够帮助你在Java面试中更好地准备算法相关的问题。
⼋⼤排序算法——快速排序(动图演⽰思路分析实例代码Java复杂度分析)⼀、动图演⽰⼆、思路分析快速排序的思想就是,选⼀个数作为基数(这⾥我选的是第⼀个数),⼤于这个基数的放到右边,⼩于这个基数的放到左边,等于这个基数的数可以放到左边或右边,看⾃⼰习惯,这⾥我是放到了左边,⼀趟结束后,将基数放到中间分隔的位置,第⼆趟将数组从基数的位置分成两半,分割后的两个的数组继续重复以上步骤,选基数,将⼩数放在基数左边,将⼤数放到基数的右边,在分割数组,,,直到数组不能再分为⽌,排序结束。
例如从⼩到⼤排序:1. 第⼀趟,第⼀个数为基数temp,设置两个指针left = 0,right = n.length, ①从right开始与基数temp⽐较,如果n[right]>基数temp,则right指针向前移⼀位,继续与基数temp⽐较,直到不满⾜n[right]>基数temp ②将n[right]赋给n[left] ③从left开始与基数temp⽐较,如果n[left]<=基数temp,则left指针向后移⼀位,继续与基数temp⽐较,直到不满⾜n[left]<=基数temp ④将n[left]赋给n[rigth] ⑤重复①-④步,直到left==right结束,将基数temp赋给n[left]2. 第⼆趟,将数组从中间分隔,每个数组再进⾏第1步的操作,然后再将分隔后的数组进⾏分隔再快排,3. 递归重复分隔快排,直到数组不能再分,也就是只剩下⼀个元素的时候,结束递归,排序完成根据思路分析,第⼀趟的执⾏流程如下图所⽰:三、负杂度分析1. 时间复杂度:最坏情况就是每⼀次取到的元素就是数组中最⼩/最⼤的,这种情况其实就是冒泡排序了(每⼀次都排好⼀个元素的顺序)这种情况时间复杂度就好计算了,就是冒泡排序的时间复杂度:T[n] = n * (n-1) = n^2 + n;最好情况下是O(nlog2n),推导过程如下:(递归算法的时间复杂度公式:T[n] = aT[n/b] + f(n) )所以平均时间复杂度为O(nlog2n)2. 空间复杂度: 快速排序使⽤的空间是O(1)的,也就是个常数级;⽽真正消耗空间的就是递归调⽤了,因为每次递归就要保持⼀些数据: 最优的情况下空间复杂度为:O(log2n);每⼀次都平分数组的情况 最差的情况下空间复杂度为:O( n );退化为冒泡排序的情况所以平均空间复杂度为O(log2n)四、Java 代码如下import java.util.Arrays;public class quick{public static void main(String[] args) {int[] arr = new int[]{10,6,3,8,33,27,66,9,7,88};// int[] arr = new int[]{1,3,2};f(arr,0,arr.length-1);System.out.println(Arrays.toString(arr));}public static void f(int[] arr,int start,int end){//直到start>=end时结束递归if(start<end){int left = start;int right = end;int temp = arr[start];while(left<right){//右⾯的数字⼤于标准数时,右边的数的位置不变,指针向左移⼀个位置while(left<right && arr[right]>temp){right--;}//右边的数字及下标⼩于或等于基本数,将右边的数放到左边if(left<right) {arr[left] = arr[right];left++;}////左边的数字⼩于或等于标准数时,左边的数的位置不变,指针向右移⼀个位置while(left<right && arr[left]<=temp){left++;}//左边的数字⼤于基本数,将左边的数放到右边arr[right] = arr[left];}//⼀趟循环结束,此时left=right,将基数放到这个重合的位置,arr[left] = temp;//将数组从left位置分为两半,继续递归下去进⾏排序f(arr,start,left);f(arr,left+1,end);}}}。
java 排序规则Java排序规则在Java中,排序是一项常见的操作,用于对数据进行整理和排列。
排序规则即决定了排序的方式和顺序,不同的排序规则可以根据需求选择合适的算法和方法。
下面将介绍几种常用的Java排序规则。
1. 字母排序字母排序是按照字母表的顺序对字符串进行排序。
在Java中,可以使用String类的compareTo方法来比较两个字符串的大小。
该方法返回一个int值,如果字符串相等则返回0,如果字符串在字母表中排在前面则返回负数,否则返回正数。
通过实现Comparator接口,可以自定义排序规则,实现对字符串数组的字母排序。
2. 数字排序数字排序是按照数字的大小对数据进行排序。
在Java中,可以使用Arrays类的sort方法对数组进行排序。
sort方法默认使用升序排序,即从小到大排列。
如果需要降序排序,可以使用Collections 类的reverseOrder方法。
通过实现Comparable接口,可以自定义排序规则,实现对自定义类对象的数字排序。
3. 时间排序时间排序是按照时间的先后顺序对数据进行排序。
在Java中,可以使用Date类或者Calendar类来表示时间,然后使用compareTo方法进行比较。
同样,通过实现Comparator接口,可以自定义排序规则,实现对时间的排序。
4. 自定义排序规则除了使用内置的排序方法和类,我们还可以自定义排序规则。
在Java中,可以通过实现Comparator接口来自定义排序规则。
Comparator接口有一个compare方法,可以根据自己的需求来实现比较逻辑。
比如,可以根据字符串的长度、数字的奇偶性等来排序。
5. 多字段排序有时候需要按照多个字段进行排序,比如先按照年龄排序,再按照姓名排序。
在Java中,可以使用多个Comparator对象来实现多字段排序。
可以使用Comparator的thenComparing方法来实现多字段排序,先按照第一个字段排序,如果相等再按照第二个字段排序,依次类推。
Java程序设计中的查找与排序算法实现案例在Java程序设计中,查找与排序算法是非常重要的部分。
它们能够对数据进行快速、高效的操作,提高程序的执行效率。
本文将介绍几种常用的查找与排序算法,并给出相应的Java实现案例。
一、查找算法1. 顺序查找顺序查找是一种简单直接的查找算法。
它从数据集合的起始位置开始逐个比较,直到找到目标元素或者遍历完整个数据集合。
以下是顺序查找的Java实现案例:```javapublic int sequentialSearch(int[] array, int target) {for (int i = 0; i < array.length; i++) {if (array[i] == target) {return i;}}return -1;}```2. 二分查找二分查找是一种高效的查找算法,但要求数据集合是有序的。
它通过重复将数据集合分成两部分,并判断目标元素在哪一部分中,从而在每次比较中减少一半的数据量。
以下是二分查找的Java实现案例:```javapublic int binarySearch(int[] array, int target) {int left = 0;int right = array.length - 1;while (left <= right) {int mid = (left + right) / 2;if (array[mid] == target) {return mid;} else if (array[mid] < target) {left = mid + 1;} else {right = mid - 1;}}return -1;```二、排序算法1. 冒泡排序冒泡排序是一种简单直观的排序算法,它通过多次遍历数据集合,每次比较相邻两个元素并进行交换,将大的元素逐渐向后移动,达到排序的目的。
以下是冒泡排序的Java实现案例:```javapublic void bubbleSort(int[] array) {int n = array.length;for (int i = 0; i < n - 1; i++) {for (int j = 0; j < n - i - 1; j++) {if (array[j] > array[j + 1]) {int temp = array[j];array[j] = array[j + 1];array[j + 1] = temp;}}}```2. 快速排序快速排序是一种常用的排序算法,它采用分治的思想。
⽤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. 希尔排序希尔排序⼜称缩⼩增量排序,其本质还是插⼊排序,只不过是将待排序列按某种规则分成⼏个⼦序列,然后如同前⾯的插⼊排序⼀般对这些⼦序列进⾏排序。
排序算法冒泡排序:思想:n个数,将第一个和第二个进行比较,将大的放在第二个位置,再将第二个和第三比较,大的放在第三个位置,依次向后比较,比较n-1次,将最大的放在最后(n的位置),然后再从第一个开始比较,比较n-2次,这次把最大的放到第n-1个位置,然后再来回比较.遵循第i次遍历就从第一个数开始比较n-i次,将最后的值放在第n-i+1的位置.java代码实现:// 冒泡排序public class BubbleSort {public static void sort(Comparable[] data) {// 数组长度int len = data.length;for (int i = 0; i < len - 1; i++) {// 临时变量Comparable temp = null;// 交换标志,false表示未交换boolean isExchanged = false;for (int j = len - 1; j > i; j--) {// 如果data[j]小于data[j - 1],交换if (data[j].compareTo(data[j - 1]) < 0) {temp = data[j];data[j] = data[j - 1];data[j - 1] = temp;// 发生了交换,故将交换标志置为真isExchanged = true;}// end if}// end for// 本趟排序未发生交换,提前终止算法,提高效率if (!isExchanged) {break;}// end if}// end for}// end sortpublic static void main(String[] args) {// 在JDK1.5版本以上,基本数据类型可以自动装箱// int,double等基本类型的包装类已实现了Comparable接口Comparable[] c = { 4, 9, 23, 1, 45, 27, 5, 2 };sort(c);System.out.println("冒泡排序后: ");for(int i = 0; i<c.length; i++){System.out.print(c[i] + ", ");}// for (Comparable data : c) {// System.out.println(data);// }}}// 简单示例public class Test_Ordination {public static void main(String args[]) {int[] s = { 23, 5, 12, 59, 78, 21, 100, 79, 66 };for (int j = 1; j <= s.length; j++) {for (int i = 0; i < s.length - 1; i++) {if (s[i] > s[i + 1]) {int temp;temp = s[i];s[i] = s[i + 1];s[i + 1] = temp;}}}for (int i = 0; i < s.length; i++) {System.out.println(s[i]);}}}快速排序:思想:基于冒泡排序,取第一个作为关键值a,用a与后面开始往前比较,遇到比a小的则交换,依然乘此关键值为a,再用a与第一个数开始向后比较,遇到比a大的则交换,最终的关键值将依然是最初的第一个元素的值,用此值将此无序序列分成两部分,比它小的都在它前面,大的都在后面,然后用递归将前面和后面的分别用快速排序进行处理,得到最终的有序序列.java代码实现:public class QuickSort {public static void main(String[] args) {// int [] arry={49, 38, 65, 97, 76, 13, 27};int[] arry = { 27, 38, 65, 97, 76, 48, 49 };// 程序还有问题.比如当数据为49,38, 65, 97, 76, 13, 27,12,11// 的时候,第一次就把最小一位放到第一位,,而出现问题QuickSort.method2(arry);// Arrays.sort(arry, 0, arry.length);for (int i = 0; i < arry.length; i++) {System.out.println("结果:" + arry[i]);}}/** * 快速排序* @param arry */public static void method2(int[] array) {// 1)设置两个变量I、J,排序开始的时候:I=0,J=N-1;int i = 0;int j = array.length - 1;// 获取数组最后一位// 2)以第一个数组元素作为关键数据,赋值给key,即 key=A[0];int k = array[0];// 获取数组第一位int f = 0;boolean check = false;int x = 0;while (i != j) {// 3)从J开始向前搜索,即由后开始向前搜索(J=J-1),找到第一个小于key 的值A[J],并与key交换;while (array[j] > k) {j--;}System.out.println("i0: "+ i + "; "+ "j0: "+ j + "; "+ "k0: "+ k + "; f0: " + f);int temp = k;k = array[j];array[j] = temp;// [49, 38, 65, 97, 76, 13, 49] //[27, 38, 65, 97, 76, 13, 49]// [27, 38, 49, 97, 76, 13, 65] //[27, 38, 49, 97, 76, 49, 65]// [27, 38, 13, 97, 76, 49, 65] //[27, 38, 13, 49, 76, 97, 65]// [27, 38, 13, 49, 76, 97, 65]// 4)从I开始向后搜索,即由前开始向后搜索(I=I+1),找到第一个大于key 的A[I],与key交换;while (array[i] < k) {i++;}System.out.println("i1: "+ i + "; "+ "j1: "+ j + "; "+ "k1: "+ k + "; f1: " + f);int temp1 = k;k = array[i];array[i] = temp1;System.out.println("i2: "+ i + "; "+ "j2: "+ j + "; "+ "k2: "+ k + "; f2: " + f);for (int a = 0; a < array.length; a++) {System.out.print(array[a] + ",");}System.out.println();// [27, 38, 65, 97, 76, 13, 49] //[27, 38, 49, 97, 76, 13, 49]// [27, 38, 49, 97, 76, 13, 65] //[27, 38, 13, 97, 76, 49, 65]// [27, 38, 13, 49, 76, 49, 65] //[27, 38, 13, 49, 76, 97, 65]System.out.println(array[i] + " " + array[j]);if (array[i] == array[j]) {x++;if (x > (array.length / 2 + 1)) {check = true;}}if (i == j || check) {k = array[0];// 获取数组第一位if (i == j && i == 0) {k = array[1];}i = 0;j = array.length - 1;// 获取数组最后一位check = false;x = 0;if (f > (array.length / 2 + 1)) {k = array[j];}if (f == array.length) {break;}f++;}// [27, 38, 13, 49, 76, 97, 65] //[13, 27, 38, 49, 76, 97, 65] }// }}}}插入排序(直接插入排序):思想:先将无序序列中的第一个值去除作为关键值,然后将其放入有序序列(即作为新序列的第一个值),然后取第二个值作为关键值,将关键值放入有序序列,并与第一个值进行比较,若小于第一个值,则将这个关键值插入到第一个值前面(交换),后面依次取值然后和前面的有序序列中的值进行比较,插入到合适位置java代码实现:public class InsertSort {public static void sort(Comparable[] data) {// 数组长度int len = data.length;// 从下标为1开始依次插入for (int i = 1; i < len; i++) {// 当前待插入的数据Comparable currentData = data[i];int temp = i;while(temp > 0 && data[temp - 1].compareTo(currentData) > 0) {// 向右移动data[temp] = data[temp - 1];temp--;}// end whiledata[temp] = currentData;}// end for}// end sortpublic static void main(String[] args) {// 在JDK1.5版本以上,基本数据类型可以自动装箱// int,double等基本类型的包装类已实现了Comparable接口Comparable[] c = { 4, 9, 23, 1, 45, 27, 5, 2 };sort(c);System.out.println("插入排序后: ");for(int i = 0; i<c.length; i++){System.out.print(c[i] + ", ");}}}选择排序:思想:与冒泡不同的是:冒泡是大的与小的交换,而选择是用下标来作为标记,记录哪个是最小的,一次遍历后交换一次,两种算法比较的次数一样,但是交换的次数不同.java代码实现:public class SelectSort {public static void main(String[] args) {int[] arr = { 2, 345, 111, 1, 34, 5 };sort(arr);System.out.println("选择排序后: ");for(int i = 0; i<arr.length; i++){System.out.print(arr[i] + ", ");}}public static void sort(int[] arr){int temp = 0;int min = 0;for (int i = 0; i < arr.length - 1; i++) {min = i;for (int j = i + 1; j < arr.length; j++) {if (arr[min] > arr[j])min = j;}if (min != i) {temp = arr[min];arr[min] = arr[i];arr[i] = temp;}}/*System.out.println("排序后的数组为:");for (int i = 0; i < arr.length; i++) {System.out.print(arr[i] + " ");}*/}}。