排序算法——归并排序

来源:互联网 发布:个人淘宝网店怎么申请 编辑:程序博客网 时间:2024/06/07 03:39

算法思想:先分割,再和并。

将数列先分成两份,在将分割出再进行分割,直至无法分割(单一元素),然后在将其按按照已排序好的两个数列进行合并。

感受:光看算法解释好像很繁琐啰嗦,但其运行效率比冒泡、快速、插入排序要快。(具体为啥,我目前也不懂)



实现代码:

public class MyMergeSort {

public static void main(String[] args) {
int a[] = {1,34,32,21,45,3,23,7,3,7,54,43};
mergeSort(a);
for(int i=0;i<a.length;i++){
System.out.print(a[i]+"   ");
}
}


private static void mergeSort(int[] a) {
System.out.println("开始排序:");
sort(a,0,a.length-1);
}


private static void sort(int[] a, int left, int right) {
if(left>=right){
return;
}
int mid = (left+right)/2;
sort(a,left,mid);
sort(a,mid+1,right);
merge(a,left,mid,right);
}


private static void merge(int[] a, int left, int mid, int right) {
int[] temp = new int[a.length];
int r1 = mid+1;
int tIndex = left;
int cIndex = left;
while(left <= mid && r1 <= right){
if(a[left] > a[r1]){
temp[tIndex++] = a[r1++]; 
}else{
temp[tIndex++] = a[left++];
}
}
while(left<=mid){
temp[tIndex++] = a[left++];
}
while(r1 <= right){
temp[tIndex++] = a[r1++];
}
while(cIndex<=right){
a[cIndex] = temp[cIndex];
cIndex++;
}
}
}



(其中递归算法需要思考下如何推理)

0 0
原创粉丝点击