面试中排序算法问到的概率太大了,虽然自己在大学学习过大多数的算法,但是感觉自己掌握的还并不是很好。
还有就是算法的时间复杂度和空间复杂度,这是必须要掌握的知识。
今天来总结一下归并排序算法,并且将其中的一些知识抽取出来进行总结。
先上代码看一下把
import java.util.Arrays; import java.util.Random; public class Test { public static void main(String[] args) { int[] a = suiJi(); int[] b = suiJi(); Arrays.sort(a); Arrays.sort(b); System.out.println(Arrays.toString(a)); System.out.println(Arrays.toString(b)); int[] c = heBing(a, b); System.out.println(Arrays.toString(c)); } private static int[] heBing(int[] a, int[] b) { /* * a[1, 7, 17, 34] * j * b[15, 18, 19, 43, 57, 70, 83] * k * c[1 ] * i */ int j=0; int k=0; int[] c = new int[a.length+b.length]; for(int i=0;i<c.length;i++) { if(j == a.length) { //c[i] = b[k]; //k++; //continue; System.arraycopy( b,k,c,i,b.length-k); break; } if(k == b.length) { //c[i] = a[j]; //j++; //continue; System.arraycopy( a,j,c,i,a.length-j); break; } if(a[j]<b[k]) { c[i] = a[j]; j++; } else { c[i] = b[k]; k++; } } return c; } private static int[] suiJi() { int n = 5+ new Random().nextInt(6); int[] a = new int[n]; for(int i=0;i<a.length;i++) { a[i] = new Random().nextInt(100); } return a; } }
这段代码中用到了Arrays.sort的排序算法
Arrays.sort并不是单一的排序,而是插入排序,快速排序,归并排序三种排序的组合
还用到了System.arraycopy(src,scrPos,dest,destPos,length)函数 此函数有五个参数,五个参数如下所示
src - 源数组。
srcPos - 源数组中的起始位置。
dest - 目标数组。
destPos - 目标数据中的起始位置。
length - 要复制的数组元素的数量。
附一张排序算法的图