高效算法设计

来源:互联网 发布:便民网络测速 编辑:程序博客网 时间:2024/05/17 08:35

归并排序:

#include<bits/stdc++.h>using namespace std;int A[100];int T[100];int cnt;void merge_sort(int *A, int x, int y, int *T){    if(y-x > 1)    {        int m = x + (y-x)/2;        int p = x, q = m, i = x;        merge_sort(A, x, m, T);        merge_sort(A, m, y, T);        while(p < m || q < y)        {            if(q >= y || (p < m && A[p] <= A[q])) //后半截数组为空或者前半截数组的                T[i++] = A[p++];            else            {                T[i++] = A[q++];                cnt += (m-p);            }        }        for(int i = x; i < y; i++)            A[i] = T[i];    }}int main(){    int n;    cin >> n;    for(int i = 0; i < n; i++)        cin >> A[i];    cnt = 0;    merge_sort(A, 0, n, T);    for(int i = 0; i < n; i++)        cout << A[i] << " ";    cout << endl;    cout << cnt << endl;    return 0;}
二分查找:

#include<bits/stdc++.h>using namespace std;int A[100];int baserch(int *A, int x, int y, int v){    int m;    while(x < y)    {        m = (x+y)/2;        if(A[m] == v) return m;        else if(A[m] > v) y = m;        else x = m+1;    }    return -1;}int main(){    int n;    int v;    cin >> n >> v;    for(int i = 1; i < n; i++)        cin >> A[i];    sort(A, A+n);    int xx = baserch(A, 0, n, v);    cout << xx << endl;    return 0;}


原创粉丝点击