分治应用 排序

2021-01-19  本文已影响0人  壹顾倾城
/********************************
* 程序名称:分治应用 
* 开发时间:
*******************************/
#include <iostream>
#include <cstdio>

using namespace std;

int s[100001], b[100001];

//合并 
void mergeArray(int left, int m, int right) {
    int l1, r1, l2, r2, k = 0;
    l1 = left;
    r1 = m;
    l2 = m + 1;
    r2 = right;
    
    while(l1 <= r1 && l2 <= r2) {
        if(s[l1] < s[l2]) {
            b[k] = s[l1];
            k ++;
            l1 ++;
        } else {
            b[k] = s[l2];
            k ++;
            l2 ++;
        }
        
    } 
    /*剩余的数合并*/
    while(l1 <= r1) {
        b[k] = s[l1];
        k ++;
        l1 ++;
    }
    /*剩余的数合并*/
    while(l2 <= r2) {
        b[k] = s[l2];
        k ++;
        l2 ++;
    }
    
    for(int i=0; i<k; i++) {
        s[left+i] = b[i];
    }
}
//排序合并 
void mergeSort(int left, int right) {
    int mid;
    if (left < right) {
        mid = (left + right) / 2;
        mergeSort(left, mid);      //左边排序 
        mergeSort(mid+1, right);   //右边排序 
        mergeArray(left, mid, right);  //左右合并 
    }
} 

//main() star
int main() {
    //code here
    int n;
    cin >> n;
    
    for(int i=0; i<n; i++) {
        cin >>s[i];
    } 
    
    mergeSort(0, n -1);
    
    for(int i=0; i<n; i++) {
        cout << s[i] <<endl;
    } 
    
    return 0;
}

测试1:

5
2 5 1 4 6
1
2
4
5
6

--------------------------------
Process exited after 4.53 seconds with return value 0
请按任意键继续. . .

测试2:

10
2 5 8 7 4 1 3 6 9 23
1
2
3
4
5
6
7
8
9
23

--------------------------------
Process exited after 7.456 seconds with return value 0
请按任意键继续. . .

上一篇 下一篇

猜你喜欢

热点阅读