当前位置:   article > 正文

java list的排序算法_JAVA排序汇总(List、数组排序、几种常用排序算法)

java list 排序方法

List排序

1、使用Collections的sort(List list)方法对List集合进行从小到大排序

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

/*** 使用Collections的sort(List list)方法对List集合进行从小到大排序*/@Testpublic voidlistDefaultSort() {

List list = new ArrayList();

list.add(1);

list.add(3);

list.add(2);

System.out.println(list);

System.out.println("------------------");

Collections.sort(list);//按从小到大排序,只能对基本数据类型的包装对象

System.out.println(list);

}

View Code

执行结果:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

[1, 3, 2]------------------[1, 2, 3]

View Code

2、使用Collections的sort(List list, Comparator super T> c)方法对List集合进行自定义排序

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

/*** 使用Collections的sort(List list, Comparator super T> c)方法对List集合进行自定义排序*/@Testpublic voidlistCustomSort() {

List list = new ArrayList();

Person p1= new Person("1", "p1" , 12);

Person p2= new Person("2", "p2" , 9);

Person p3= new Person("3", "p3" , 13);

Person p4= new Person("4", "p4" , 9);

list.add(p1);

list.add(p2);

list.add(p3);

list.add(p4);

System.out.println(list);

System.out.println("------------------");

Collections.sort(list,new Comparator() {//按年龄从大到小排序

@Overridepublic intcompare(Person p1, Person p2) {return p1.getAge() == p2.getAge() ? 0 : (p1.getAge() < p2.getAge() ? 1 : -1);

}

});

System.out.println(list);

}

View Code

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

classPerson {privateString id;privateString name;private intage;public Person(String id, String name, intage) {super();this.id =id;this.name =name;this.age =age;

}publicString getId() {returnid;

}public voidsetId(String id) {this.id =id;

}publicString getName() {returnname;

}public voidsetName(String name) {this.name =name;

}public intgetAge() {returnage;

}public void setAge(intage) {this.age =age;

}

@OverridepublicString toString() {return "\n Person [id=" + id + ", name=" + name + ", age=" + age + "]";

}

}

View Code

执行结果:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

[

Person [id=1, name=p1, age=12],

Person [id=2, name=p2, age=9],

Person [id=3, name=p3, age=13],

Person [id=4, name=p4, age=9]]------------------[

Person [id=3, name=p3, age=13],

Person [id=1, name=p1, age=12],

Person [id=2, name=p2, age=9],

Person [id=4, name=p4, age=9]]

View Code

数组排序

1、使用Arrays.sort(int[] a)方法对数组按从小到大排序

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

/*** 使用Arrays.sort(int[] a)方法对数组按从小到大排序*/@Testpublic voidarrayDefaultSort() {int[] array = {3, 4, 6, 1, 8, 2, 1, 5, 9, 0};for (inti : array) {

System.out.print(i);

System.out.print(" ");

}

System.out.println("");

System.out.println("---------------------");

Arrays.sort(array);//按从小到大排序,只能对基本数据类型以及其封装对象

for (inti : array) {

System.out.print(i);

System.out.print(" ");

}

}

View Code

执行结果:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

3 4 6 1 8 2 1 5 9 0

---------------------

0 1 1 2 3 4 5 6 8 9

View Code

2、使用Arrays.sort(int[] a, int fromIndex, int toIndex)部分从小到大排序

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

/*** 使用Arrays.sort(int[] a, int fromIndex, int toIndex)部分从小到大排序

* fromIndex 要排序的第一位索引(包括,从这开始)

* toIndex 要排序的最后一个索引(不包括在内,在这结束)*/@Testpublic voidarrayPartSort() {

Integer[] array= {3, 4, 6, 1, 8, 2, 1, 5, 9, 0};for (inti : array) {

System.out.print(i);

System.out.print(" ");

}

System.out.println("");

System.out.println("---------------------");

Arrays.sort(array,3, 6); //对下标为3至6(不包括6)按从小到大排序,只能对基本数据类型以及其封装对象

for (inti : array) {

System.out.print(i);

System.out.print(" ");

}

}

View Code

执行结果:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

3 4 6 1 8 2 1 5 9 0

---------------------

3 4 6 1 2 8 1 5 9 0

View Code

3、使用Arrays.sort(T[] a, Comparator super T> c)自定义排序

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

/*** 使用Arrays.sort(T[] a, Comparator super T> c)自定义排序*/@Testpublic voidarrayCustomSort() {

Integer[] array= {3, 4, 6, 1, 8, 2, 1, 5, 9, 0};for(Integer i : array) {

System.out.print(i);

System.out.print(" ");

}

System.out.println("");

System.out.println("---------------------");

Arrays.sort(array,new Comparator() {//从大到小排序

@Overridepublic intcompare(Integer i1, Integer i2) {return i1 == i2 ? 0 : (i1 < i2 ? 1 : -1);

}

});for (inti : array) {

System.out.print(i);

System.out.print(" ");

}

}

View Code

执行结果:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

3 4 6 1 8 2 1 5 9 0

---------------------

9 8 6 5 4 3 2 1 1 0

View Code

常见排序算法

1、冒泡排序

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

/*** 冒泡排序(按从小到大排序)

* 最佳情况:T(n) = O(n) 最差情况:T(n) = O(n2) 平均情况:T(n) = O(n2)*/@Testpublic voidbubbleSort() {int[] array = { 3, 4, 6, 1, 8, 2, 1, 5, 9, 0};for (int i = 0; i < array.length; i++) {for (int j = 0; j < array.length - 1 - i; j++) {if (array[j + 1]

array[j+ 1] =array[j];

array[j]=temp;

}

}

}for (inti : array) {

System.out.print(i);

System.out.print(" ");

}

}

View Code

2、选择排序

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

/*** 选择排序(按从小到大排序)

* 最佳情况:T(n) = O(n2) 最差情况:T(n) = O(n2) 平均情况:T(n) = O(n2)*/@Testpublic voidselectionSort() {int[] array = { 3, 4, 6, 1, 8, 2, 1, 5, 9, 0};for (int i = 0; i < array.length; i++) {int minIndex =i;for (int j = i; j < array.length; j++) {if (array[j]

minIndex=j;

}int temp =array[minIndex];

array[minIndex]=array[i];

array[i]=temp;

}for (inti : array) {

System.out.print(i);

System.out.print(" ");

}

}

View Code

3、插入排序

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

/*** 插入排序(按从小到大排序)

* 最佳情况:T(n) = O(n) 最坏情况:T(n) = O(n2) 平均情况:T(n) = O(n2)*/@Testpublic voidinsertionSort() {int[] array = { 3, 4, 6, 1, 8, 2, 1, 5, 9, 0};intcurrent;for (int i = 0; i < array.length - 1; i++) {

current= array[i + 1];int preIndex =i;while (preIndex >= 0 && current

array[preIndex+ 1] =array[preIndex];

preIndex--;

}

array[preIndex+ 1] =current;

}for (inti : array) {

System.out.print(i);

System.out.print(" ");

}

}

View Code

4、希尔排序

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

/*** 从大到小

*@paramarray*/

public static void shellSort1(int[] array) {int number = array.length/2;inti,j,temp;while (number >= 1){for (i = number; i < array.length; i++) {

temp=array[i];

j= i -number;while (j >= 0 && array[j]

array[j+ number] =array[j];

j= j -number;

}

array[j+ number] =temp;

}

number= number/2;

}

}

View Code

5、归并排序

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

/*** 从小到大排序

*@paramarr*/

public static void sort(int[]array){int []temp = new int[array.length];//在排序前,先建好一个长度等于原数组长度的临时数组,避免递归中频繁开辟空间

sort(array,0,array.length-1,temp);

}private static void sort(int[] array,int left,int right,int[]temp){if(left

sort(array,left,mid,temp);//左边归并排序,使得左子序列有序

sort(array,mid+1,right,temp);//右边归并排序,使得右子序列有序

merge(array,left,mid,right,temp);//将两个有序子数组合并操作

}

}private static void merge(int[] arr,int left,int mid,int right,int[] temp){int i = left;//左序列指针

int j = mid + 1;//右序列指针

int t = 0;//临时数组指针

while (i <= mid && j <=right){if(arr[i] <=arr[j]){

temp[t++] = arr[i++];

}else{

temp[t++] = arr[j++];

}

}while(i <= mid){//将左边剩余元素填充进temp中

temp[t++] = arr[i++];

}while(j <= right){//将右序列剩余元素填充进temp中

temp[t++] = arr[j++];

}

t= 0;//将temp中的元素全部拷贝到原数组中

while(left <=right){

arr[left++] = temp[t++];

}

}

View Code

6、快速排序

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

public static voidmain(String[] args) {int[] array = new int[]{2,3,5,6,9,1,0,3,4,6};

quickSort(array);for (int i=0;i

System.out.print(array[i]+ " ");

}

}/*** 快速排序,使得整数数组 arr 有序*/

public static void quickSort(int[] array) {if (array == null || array.length < 2) {return;

}

quickSort(array,0, array.length - 1);

}/*** 快速排序,使得整数数组 arr 的 [L, R] 部分有序*/

public static void quickSort(int[] arr, int L, intR) {if(L

swap(arr, new Random().nextInt(R - L + 1) +L, R);int[] p =partition(arr, L, R);

quickSort(arr, L, p[0] - 1);

quickSort(arr, p[1] + 1, R);

}

}/*** 分区的过程,整数数组 arr 的[L, R]部分上,使得:

* 大于 arr[R] 的元素位于[L, R]部分的右边,但这部分数据不一定有序

* 小于 arr[R] 的元素位于[L, R]部分的左边,但这部分数据不一定有序

* 等于 arr[R] 的元素位于[L, R]部分的中间

* 返回等于部分的第一个元素的下标和最后一个下标组成的整数数组*/

public static int[] partition(int[] arr, int L, intR) {int basic =arr[R];int less = L - 1;int more = R + 1;while(L

swap(arr,++less, L++);

}else if (arr[L] >basic) {

swap(arr,--more, L);

}else{

L++;

}

}return new int[] { less + 1, more - 1};

}/** 交换数组 arr 中下标为 i 和下标为 j 位置的元素*/

public static void swap(int[] arr, int i, intj) {int temp =arr[i];

arr[i]=arr[j];

arr[j]=temp;

}

View Code

7、堆排序

8、计数排序

9、桶排序

10、基数排序

递归

1、递归算法计算n!

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

/*** 递归算法*/@Testpublic voidrecursion() {

System.out.println(factorial(2));

}/*** 递归算法计算阶乘n!

*

*@paramn

*@return

*/

public staticInteger factorial(Integer n) {if (n < 0)return 0;if (n == 1)return 1;return n * factorial(n - 1);

}

View Code

2、递归计算1*2+2*3+3*4+...+n*(n+1)

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

/*** 递归算法*/@Testpublic voidrecursion() {

System.out.println(productSum(4));

}/*** 递归算法计算1*2+2*3+3*4+...+n*(n+1)

*@paramn

*@return

*/

public staticInteger productSum(Integer n) {if (n <= 0)return 0;if (n == 1)return 2;int result = productSum(n - 1) + n * (n + 1);returnresult;

}

View Code

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/440127?site
推荐阅读
相关标签
  

闽ICP备14008679号