zoukankan      html  css  js  c++  java
  • 归并排序的迭代表示/自底向上归并

     1 #include <iostream>
     2 #include <stdlib.h>
     3 
     4 using namespace std;
     5 #define N 100
     6 
     7 //合并序列中的s:m-1和m:e两个子序列
     8 void merge(int array[], int s, int m, int e) {
     9     int ta[N], i, j, k = 0;    
    10     i = s;
    11     j = m;
    12     while (i < m && j <= e) {
    13         if (array[i] < array[j]) {
    14             ta[k++] = array[i++];
    15         } else {
    16             ta[k++] = array[j++];
    17         }
    18     }
    19     while (i < m) {
    20         ta[k++] = array[i++];
    21     } 
    22     while (j <= e) {
    23         ta[k++] = array[j++];
    24     }
    25     i = s;
    26     k = 0;
    27     while (i <= e) {
    28         array[i++] = ta[k++];
    29     }
    30 }
    31 
    32 //自底向上归并
    33 void buttomUpSort(int array[], int length) {
    34     int i = 1, s, m, e, t;
    35     while ((length / i) >= 1) {    //依次从2, 4, 8......至序列被分成两部分向上归并
    36         s = 0;
    37         while (1) {
    38             m = s + i;
    39             if (m >= length)//若此段序列孤立(及原序列被划分成奇数个部分,最后一部分不做合并,进入到下一次合并)
    40                 break;
    41             else {
    42                 e = ((t = m + i - 1) < length)?t:length - 1;//最后一段序列的截止位为length-1
    43                 merge(array, s, m, e);
    44             }
    45             s += i*2;
    46         }
    47         i *= 2;
    48     }
    49 }
    50 
    51 int main(int args, char **argv) {
    52     int array[N];
    53     for (int i = 0; i < N; ++i) {
    54         array[i] = rand() % 100;
    55     }
    56     for (int i = 0; i < N; i++) {
    57         cout << '\t' << array[i];
    58     }
    59     cout << endl;
    60     buttomUpSort(array, N);
    61     for (int i = 0; i < N; i++) {
    62         cout << '\t' << array[i];
    63     }
    64     return 0;
    65 }
  • 相关阅读:
    Filter 过滤器
    struts2 action接收请求参数和类型转换
    Struts2入门学习
    struts2请求参数校验
    IntelliJ IDEA 使用心得与常用快捷键
    关于动态代理详解
    web.xml文件详解
    关于mysql插入数据异常
    关于控制台输出 警告 log4j:WARN No appenders could be found for logger
    Hive load from hdfs 出错
  • 原文地址:https://www.cnblogs.com/Sunlnx/p/3402518.html
Copyright © 2011-2022 走看看