幾個經典演算法研究__演算法

來源:互聯網
上載者:User

最近研究幾個經典演算法,比如二分尋找,大數相加等。加強一下編碼思路訓練,這幾個演算法都不是很難,基本可以在演算中得到代碼實現步驟,如下:

#include<stdio.h>#include<string>#include<vector>#include <iostream>using namespace std;#define MAX 1010const int NotFound = -1;int Bsearch(const vector<string> &v, int start, int stop, string key) //二分尋找,遞迴實現。當然之間用迴圈就可以了。{    if (start > stop)    {        return NotFound;    }    int mid = (start + stop)/2;    if (key == v[mid])    {        return mid;    }    else if (key < v[mid])    {        return Bsearch(v, start, mid - 1, key);    }    else    {        return Bsearch(v, mid + 1, stop, key);    }}string bignumadd(const string str1, const string str2)  //大數相加{    int a[MAX] = {0}, b[MAX] = {0};    int len1, len2, i, k, up = 0;    int len = 0;    char buf[512] = {0};    len1 = str1.length();    len2 = str2.length();    for(i = len1 - 1, k = 0; i >= 0; --i)        a[k++] = str1[i] - '0';    for(i = len2 - 1, k = 0; i >= 0; --i)        b[k++] = str2[i] - '0';    for(i = 0, up = 0; i < MAX; ++i)    {        a[i] = a[i] + b[i] + up;        up = a[i] / 10;        a[i] %= 10;    }    for(i = MAX -1; i >= 0; --i)        if(a[i]) break;    len += sprintf(buf + len, "%s + %s = ", str1.c_str(), str2.c_str());    for(k = i; k >= 0; --k)    {        len += sprintf(buf + len ,"%d", a[k]);    }    string str(buf);    printf("%s\n", buf);    return str;}void RecPermute(string sofar, string rest)  //全排列(遞迴演算法){    if (rest == "")    {       cout << sofar << endl;    }    else    {        for (int i = 0; i < rest.length(); i++)        {            string next = sofar + rest.at(i);            string remaining = rest.substr(0, i)                             + rest.substr(i + 1, rest.length() - i);            RecPermute(next, remaining);        }    }}void move(int n,char src,char dest,char tmp) //漢諾塔問題{    if(n==1)        printf("\t%c->%c\n",src,tmp);    //當n只有1個的時候直接從a移動到c    else    {        move(n-1,src,tmp,dest);            //第n-1個要從a通過c移動到b        printf("\t%c->%c\n",src,tmp);        move(n-1,dest,src,tmp);            //n-1個移動過來之後b變開始盤,b通過a移動到c,這邊很難理解    }}int main(){   RecPermute("","ABCD");    return 0;}

******************************************************************************************************************

qsort排序函數在結構體數組中的運用

比如實現如下要求:

先按照學生姓名字典序排序,學生姓名一樣的,按照分數從大到小排序。執行個體代碼如下:

//============================================================================// Name        : CTest.cpp// Author      : @CodingGeek// Version     : 1.0// Copyright   : Your copyright notice// Description : 幾種常見的STL容器學習研究//============================================================================#include <iostream>#include <string.h>#include <stdlib.h>using namespace std;typedef struct{  int id;  char name[20];  int score;}T_Member;T_Member g_MemIdTbl[] ={ {1001, "zhangsan", 79}, {1004, "lisi", 78}, {1008, "wangwu", 85}, {1006, "zhaoliu", 87}, {1007, "sunqian", 67}, {1005, "wangyong", 78}, {1009, "caoxie", 76}, {1003, "wangwu", 90},};#define SIZE  sizeof(g_MemIdTbl) / sizeof(g_MemIdTbl[0])int compare_fun(const void *a, const void *b){    T_Member *pa = (T_Member*)a;    T_Member *pb = (T_Member*)b;    if (strcmp(pa->name,pb->name) != 0)    {         return strcmp(pa->name,pb->name);    }    else    {        return pb->score - pa->score;    }}int main(){    qsort(g_MemIdTbl, SIZE, sizeof(g_MemIdTbl[0]),compare_fun);    for (unsigned i = 0; i < SIZE; i++)    {      cout << g_MemIdTbl[i].id<<":"<<g_MemIdTbl[i].name <<":"           << g_MemIdTbl[i].score << endl;    }    return 0;}


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.