zoukankan      html  css  js  c++  java
  • 基于分治算法的归并排序

    #include <stdio.h>
    #include <math.h>
    
    void main() {
      int array[] = {1,212,35,1,456,12376,167,12,7523,71,634};
      mergeSort(array, 0, 10);
      for(int i = 0; i < 11; i++ ) {
        printf("%d
    ", array[i]);
      }
    }
    void mergeSort(int* array, int start, int end) { //start end 均为索引
      if(start < end) {
        int middle = ceil((start + end)/2);
        mergeSort(array, start, middle);
        mergeSort(array, middle + 1, end);
        merge(array, start, middle, end);
      }
    }
    void merge(int* array, int start, int middle, int end){ //start middle end 均为索引
      int leftLength = middle - start + 1;
      int rightLength = end - middle ;
      int* left = (int*)malloc(sizeof(int) * leftLength);
      int* right = (int*)malloc(sizeof(int) * rightLength);
      int i = 0;
      int j = 0;
      int leftStart = start;
      int rightStart = middle + 1;
      for(; i < leftLength ; i++) {
        left[i] = array[leftStart];
        ++leftStart;
      }
      for(; j < rightLength ; j++) {
        right[j] = array[rightStart];
        ++rightStart;
      }
      i=0;
      j=0;
      for(int n = start; n <= end; n++ ) {
        if((i<leftLength && left[i] <= right[j]) || j>=rightLength ) {
          array[n] = left[i];
          i++;
        }
        else if((j<rightLength && right[j] <= left[i]) || i>=leftLength) {
          array[n] = right[j];
          j++;
        }
      }
      free(left);
      free(right);
    }
    //C 新手,多多包涵

    分治算法的三个基本为:

    1. 如果问题可分解,则分解成N个问题, 每个小问题都是总问题的一个小规模实例

    2. 求解小问题

    3. 合并解,组成问题最终解。

    //TODO 写出分析过程

  • 相关阅读:
    JS常用设计模式
    react native两次点击返回按钮退出APP
    react-native-device-info集成遇到的坑
    Django环境搭建之hello world
    jmeter之beanshell断言实例
    jmeter之beanshell断言---数据处理
    Jmeter将JDBC Request查询结果作为下一个接口参数方法(转载)
    App功能测试的注意点
    mybatis的CRUD实例(四)
    mybatis的CRUD实例(三)
  • 原文地址:https://www.cnblogs.com/wofeiwofei/p/5667926.html
Copyright © 2011-2022 走看看