美文网首页技术
归并排序-Merge Sort

归并排序-Merge Sort

作者: lxtyp | 来源:发表于2023-03-04 13:13 被阅读0次

归并排序是建立在归并操作上的一种有效,稳定的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。

实现步骤
1,将序列进行归并操作。直至每分组只有一个数字。将分组内每相邻两个数字进行归并操作,形成n个序列,对每个序列两两合并进行排序,形成n/2个序列,每个序列内都是有序的。
2,将上述序列再次归并,形成n/4个序列,每个序列包含四个元素。
3,再次进行分组,分组数量处以2,对分组内元素进行排序。
4,重复以上步骤,直到所有元素排序完毕。

实现代码:

public void solution() {
    int[] befArrays = {3, 5, 1, 4, 12, 18, 19, 20, 9, 3, 15, 7, 0};
    int length = befArrays.length;

    this.mergeSort(befArrays, 0, length-1);

    for (int i=0; i<length; i++) {
        System.out.printf(befArrays[i] + "\t");
    }
}

public void mergeSort(int[] befArrays, int left, int right) {
    if (left >= right) {
        return;
    }

    int middle = (left+right)/2;
    this.mergeSort(befArrays, left, middle);
    this.mergeSort(befArrays, middle+1, right);

    int[] newArrays = new int[right-left+1];
    int index=0;
    int lIndex=left;
    int rIndex=middle+1;
    while (lIndex<=middle&&rIndex<=right) {
        if (befArrays[lIndex]<befArrays[rIndex]) {
            newArrays[index++] = befArrays[lIndex++];
        } else {
            newArrays[index++] = befArrays[rIndex++];
        }
    }

    while (lIndex<=middle) {
        newArrays[index++] = befArrays[lIndex++];
    }
    while (rIndex<=right) {
        newArrays[index++] = befArrays[rIndex++];
    }

    index = 0;
    while (index < newArrays.length) {
        befArrays[left+index] = newArrays[index];
        index++;
    }
}

算法分析:

时间复杂度
最优 O(nlogn)
最坏 O(nlogn)
平均 O(nlogn)
空间复杂度 O(n)

相关文章

  • 排序算法-5--- 归并排序

    归并排序 Merge sort 1、概念 归并排序(英语:Merge sort,或mergesort),是创建在归...

  • 归并排序和快速排序

    1.归并排序(Merge Sort) 归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算...

  • JavaScript的排序算法——归并排序

    归并排序(Merge Sort) 在计算机科学里,归并排序(Merge Sort)是一种通用有效的排序算法。通常情...

  • c算法O(n*log n)(二)

    归并排序Merge Sort 自顶向下进行排序 自底向上进行归并排序 快速排序

  • 归并排序

    来源:图解排序算法(四)之归并排序 - dreamcatcher-cx - 博客园 归并排序(MERGE-SORT...

  • 排序算法(2):归并排序

     归并排序:归并排序(英语:Merge sort,或mergesort),是创建在归并操作上的一种有效的排序算法,...

  • python归并排序--递归实现

    归并排序: 归并排序(英语:Merge sort,或mergesort),是创建在归并操作上的一种有效的排序算法,...

  • 排序算法之归并排序

    归并排序(Merge Sort) 归并排序是利用归并的思想实现排序的方式,该算法采用的是经典的分治算法 归并排序过...

  • 归并排序

    什么是归并排序? 归并排序(Merge sort,或mergesort),是创建在归并操作上的一种有效的排序算法,...

  • 05_归并排序

    def merge_sort(data): ''' 归并排序 :param lists: :ret...

网友评论

    本文标题:归并排序-Merge Sort

    本文链接:https://www.haomeiwen.com/subject/twthldtx.html