介绍
怎么在java项目中使用归并排序算法?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
<强>归并排序强>
,,,,,,归并排序,指的是将两个已经排序的序列合并成一个序列的操作只
归并操作的过程如下:
- <李>
,申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列
李> <李>,设定两个指针,最初位置分别为两个已经排序序列的起始位置
李> <李>,比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置
李> <李>,重复步骤3直到某一指针到达序列尾
李> <李>,将另一序列剩下的所有元素直接复制到合并序列尾
Java代码,
/* *, ,*归并排序, *大敌; ,* @param ts ,*/@SuppressWarnings (“unchecked"), public static & lt; T extends  Comparable<?, super T>祝辞,void 归并排序(T [], ts), {, ,//才能,辅助空间, T[],才能tempArray =, (T []), new 可比[ts.length];, , 归并排序才能(ts, tempArray,, 0,, ts.length 作用;1),, }, ,/* *, ,*递归, ,*/private static & lt; T extends  Comparable<?, super T>祝辞,void 归并排序(T [], ts, T [], tempArray,, int 左,int 右),{, , if 才能;(left & lt;,右),{, , ,,,int center =,(时间+ left 右),/,2,, , ,,,归并排序(ts, tempArray,,,,中心),, , ,,,归并排序(ts, tempArray,, center +, 1,右),, , ,,,//,左右合并, ,,,合并(ts, tempArray,,,, center +, 1,右),, , ,,}, , }, ,/* *, ,*合并, ,*/private static & lt; T extends  Comparable<?, super T>祝辞,void 合并(T [], ts, T [], tempArray,, int leftPos,, int rightPos,, int rightEnd), {, int 才能;leftEnd =, rightPos 作用;1;, int 才能;temPos =, leftPos;, int 才能;numElements =, rightEnd 作用;leftPos +, 1,, , while 才能;(leftPos & lt;=, leftEnd ,,, rightPos & lt;=, rightEnd), ,,,//比较放到辅助空间, ,,,if (ts (leftPos) .compareTo (ts [rightPos]), & lt;=, 0), ,,,,,tempArray节奏(+ +),=,ts (leftPos + +),, ,,,else ,,,,,tempArray节奏(+ +),=,ts (rightPos + +),, , while 才能;(leftPos & lt;=, leftEnd), ,,,tempArray节奏(+ +),=,ts (leftPos + +),, , while 才能;(rightPos & lt;=, rightEnd), ,,,tempArray节奏(+ +),=,ts (rightPos + +),, ,//才能考回原数组,此处最好用System.arraycopy优化, for 才能;(int 小姐:=,0;,小姐:& lt;, numElements;,我+ +,rightEnd——), ,,,ts (rightEnd),=, tempArray [rightEnd];, }
<>强,复杂度:O (n log n) 强>
,,,,,,比较操作的次数介于(n o (log n))/2和n o (log n) - n + 1。赋值操作的次数是(2 nlogn)。
,,,,,,归并算法的空间复杂度为:Θ(n),
<强>,稳定性:稳定,
强>
<强>扩展:强>
,,,,,,在java中,当执行一次泛型排序时,进行一次元比较可能是昂贵的,但是移动元素则是省时间的。归并排序使用所有的流行的排序算法中最少的比较次数,因此是使用java的通用排序算中的上好的选择。
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。