简单一些算法

来源:互联网 发布:vm优化设置 编辑:程序博客网 时间:2024/06/14 19:42
#include<iostream>using namespace std;void move(char from, char to){    cout << from << "---->" << to << endl;}void haoi(int n, char a, char b, char c){    if (1 == n)    {        move(a, c);    }    else    {        haoi(n - 1, a, c, b);        move(a, c);        haoi(n - 1, b, a, c);    }}int main01(){    haoi(3, 'A', 'B', 'C');    return 0;}//二分查找int brnarySearch(int *a, int start, int end, int aim){    int mid = (end + start) / 2;    if (aim == a[mid])//找到    {        return mid;    }    else {        if (aim < a[mid])        {            return brnarySearch(a, start, mid - 1, aim);//前        }        else        {            return brnarySearch(a, mid + 1, end, aim);//后        }    }}int main02(){    int a[] = { 1,3,7,8,10,13,15 };    int len = sizeof(a) / sizeof(int);    int pos = brnarySearch(a, 0, len - 1, 7);    cout << "is" << " a[" << pos << "]" << endl;    return 0;}//归并排序void Merge(int *a, int Begin, int mid, int End){    int *b = new int[(End - Begin + 1)*sizeof(int)];    int i = Begin;    int j = mid + 1;    int k = 0;    //合并到b[]中    while (i <= mid && j <= End) {        if (a[i] <= a[j]) {            b[k++] = a[i++];        }        else {            b[k++] = a[j++];        }    }    while (i <= mid) {        b[k++] = a[i++];    }    while (j <= End) {        b[k++] = a[j++];    }    // 复制回a[]中    for (int m = 0; m < k; m++) {        a[Begin + m] = b[m];    }    delete[]b;}void mergeSort(int *a, int Begin, int End){    int mid = (Begin + End) / 2;    if (Begin >= End)        return;    else {        mergeSort(a, Begin, mid); // 划分前半部分        //Merge(a, Begin, mid, End);// 合并         mergeSort(a, mid + 1, End); // 划分后半部分        Merge(a, Begin, mid, End);// 合并     }}void show(int *a, int len){    for (int i = 0; i < len; i++)        cout << a[i] << " ";    cout << endl;}int main(){    int a[] = { 5, 7, 2, 8, 1, 3, 6 };    int len = sizeof(a) / sizeof(int);    mergeSort(a, 0, len - 1);    Merge(a, 0, 3, 6);    show(a, len);    return 0;}
原创粉丝点击