zoukankan      html  css  js  c++  java
  • 归并排序

    归并排序最差运行时间是O(nlogn),它是利用递归设计程序的典型例子。采用分治的思想。
    归并排序的最基础的操作就是合并两个已经排好序的序列。
    假设我们有一个没有排好序的序列,那么首先我们使用分割的办法将这个序列分割成一个一个已经排好序的子序列。然后再利用归并的方法将一个个的子序列合并成排序好的序列。分割和归并的过程如下:

                      1  4  3    5  2  6

                         /              

                     1,4,3           5,2,6

                      /                 /    

                   1,4     3        5,2     6

        /     /               /     /    

              1    4       3       5     2     6

        /                     /        

              1,4         3          2,5       6

                     /                      

                 1,3,4                    2,5,6

                                ||

             1,2,3,4,5,6

    首先最核心的部分是如何合并两个有序列表:

    void sort(int arr[], int first, int last) {
        int mid;
        if(first < last) {
            mid = (first + last)/2;
            sort(arr, first, mid);
            sort(arr, mid+1, last);
            merge(arr, first, mid, last);
        }
    }
    
    void merge(int arr[], int first, int mid, int last) {
        int temp[last-first +1];
        int i,j,k;
        for (i=first, j=mid +1, k=last; i<=mid, j<=last; k++) {
            if(arr[i] < arr[j]){
                temp[k] = arr[i];
                i++;
            } else 
            {
                temp[k] = arr[j];
                j++;
            }
            if(; i< mid+1; i++) {
                temp[k] = arr[i];
            }
            if(; j<last +1; j++){
                temp[k] = arr[j];
            }
        }
        for(i=first, i<=last; i++) {
            arr[i] = temp[i];
        }
    }
  • 相关阅读:
    Linux 下安装JDK1.8
    INSERT IGNORE 与INSERT INTO的区别
    linux安装redis 完整步骤
    从0开始 图论学习 广度优先搜索 链式前向星表示法
    从0开始 图论学习 深度优先遍历 链式前向星表示法
    从0开始 图论学习 链式前向星 最好的建图方法
    从0开始 图论学习 邻接表 STL vector
    从0开始 图论学习 前向星表示法
    数据结构实习
    数据结构实习
  • 原文地址:https://www.cnblogs.com/kongqueling/p/3216082.html
Copyright © 2011-2022 走看看