<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    從制造到創(chuàng)造
    軟件工程師成長(zhǎng)之路
    posts - 292,  comments - 96,  trackbacks - 0
    常用算法

    ??1?////////////////////////////////////////////////////////////////////////////////
    ??2?//
    ??3?//????????????????????????????常用算法
    ??4?//
    ??5?////////////////////////////////////////////////////////////////////////////////
    ??6?
    ??7?#include?<stdio.h>
    ??8?#include?<string.h>
    ??9?
    ?10?void?BubbleSort(?int?nArr[],?int?nLength?);
    ?11?void?SelectSort(?int?nArr[],?int?nLength?);
    ?12?void?InsertSort(?int?nArr[],?int?nLength?);
    ?13?void?QuickSort(?int?nArr[],?int?nLength?);
    ?14?int?Search(?int?nArr[],?int?nLength,?const?int?nFindVal?);
    ?15?int?HalfSearch(?int?nArr[],?int?nLength,?const?int?nFindVal?);
    ?16?
    ?17?
    ?18?////////////////////////////////////////////////////////////////////////////////
    ?19?//
    ?20?//????1、排序
    ?21?//
    ?22?////////////////////////////////////////////////////////////////////////////////
    ?23?
    ?24?////////////////////////////////////////////////////////////////////////////////
    ?25?//
    ?26?//????1.1、冒泡排序
    ?27?//
    ?28?//????????冒泡排序的基本思想:
    ?29?//????????從R[0]開(kāi)始,逐個(gè)比較R[i]和R[i+1](i=0,1,,n-1)的大小,若R[i]?>?R[i+1]
    ?30?//????則交換R[i]和R[i+1]的位置。第一趟全部比較完畢后R[n-1]是序列中最大的元素。再?gòu)?br />?31?//????R[1]開(kāi)始逐個(gè)比較R[i]和R[i+1](i=0,1,,n-2)的大小若R[i]?>?R[i+1]則交換R[i]
    ?32?//????和R[i+1]的位置。等第二趟全部比較完畢后R[n-2]是序列中最大的元素。如此反復(fù)進(jìn)行
    ?33?//????n-1趟冒泡排序后,序列中的元素便排好序了。
    ?34?//
    ?35?////////////////////////////////////////////////////////////////////////////////
    ?36?
    ?37?void?BubbleSort(?int?nArr[],?int?nLength?)
    ?38?{
    ?39?????int?i,?j,?iTemp;
    ?40?????bool?bIsChange?=?true;
    ?41?
    ?42?????for?(?i?=?0;?i?<?nLength?-?1;?i++?)
    ?43?????{
    ?44?????????if?(?!bIsChange?)
    ?45?????????{
    ?46?????????????break;
    ?47?????????}
    ?48?
    ?49?????????bIsChange?=?false;
    ?50?????????for?(?j?=?0;?j?<?nLength?-?1?-?i;?j++?)
    ?51?????????{
    ?52?????????????if?(?nArr[j]?>?nArr[j?+?1]?)
    ?53?????????????{
    ?54?????????????????iTemp?=?nArr[j];
    ?55?????????????????nArr[j]?=?nArr[j?+?1];
    ?56?????????????????nArr[j?+?1]?=?iTemp;
    ?57?
    ?58?????????????????bIsChange?=?true;
    ?59?????????????}
    ?60?????????}
    ?61?????}
    ?62?}
    ?63?
    ?64?////////////////////////////////////////////////////////////////////////////////
    ?65?//
    ?66?//????1.2、選擇排序
    ?67?//
    ?68?//????????選擇排序的基本思想:
    ?69?//????????設(shè)所排列序列的元素個(gè)數(shù)為n,對(duì)i值取0,1,2,,n-2,從R[i],,R[n-1]這些
    ?70?//????元素中找出最小的元素,與R[i]進(jìn)行交換,執(zhí)行n-1趟后完成了元素排序。
    ?71?//
    ?72?////////////////////////////////////////////////////////////////////////////////
    ?73?
    ?74?void?SelectSort(?int?nArr[],?int?nLength?)
    ?75?{
    ?76?????int?i,?j,?nMinIndex,?nTemp;
    ?77?
    ?78?????for?(?i?=?0;?i?<?nLength;?i++?)
    ?79?????{
    ?80?????????nMinIndex?=?i;
    ?81?????????for?(?j?=?i?+?1;?j?<?nLength;?j++?)
    ?82?????????{
    ?83?????????????if?(?nArr[j]?<?nArr[nMinIndex]?)
    ?84?????????????{
    ?85?????????????????nMinIndex?=?j;
    ?86?????????????}
    ?87?????????}
    ?88?
    ?89?????????if?(?i?!=?nMinIndex?)
    ?90?????????{
    ?91?????????????nTemp?=?nArr[nMinIndex];
    ?92?????????????nArr[nMinIndex]?=?nArr[i];
    ?93?????????????nArr[i]?=?nTemp;
    ?94?????????}
    ?95?????}
    ?96?}
    ?97?
    ?98?////////////////////////////////////////////////////////////////////////////////
    ?99?//
    100?//????1.3、插入排序
    101?//
    102?//????????插入排序的基本思想:
    103?//????????把n個(gè)元素的序列劃分為己排序部分和未排序部分,即在處理第i個(gè)元素R[i-1]時(shí),
    104?//????R[0],R[1],,R[i-2]是已排好的有序部分,R[i-1],R[i],,R[n-1]屬于未排序的
    105?//????部分。這時(shí),用R[i-1]依次與R[0],R[1],,R[i-2]進(jìn)行比較,找出在該有序序列中
    106?//????應(yīng)插入的位置,將R[i-1]插入,原位置上的元素R[i-1]均順序后移一位。將上述過(guò)程
    107?//????從i=1到i=n-1執(zhí)行n-1趟,就完成了這個(gè)序列的所有元素的排序。
    108?//
    109?////////////////////////////////////////////////////////////////////////////////
    110?
    111?void?InsertSort(?int?nArr[],?int?nLength?)
    112?{
    113?????int?i,?j,?nCurVal;
    114?
    115?????for?(?i?=?1;?i?<?nLength;?i++?)
    116?????{
    117?????????nCurVal?=?nArr[i];
    118?????????j?=?i?-?1;????????????????//?j指向有序序列的最后一個(gè)元素
    119?
    120?????????while?(?(?j?>=?0?)?&&?(?nCurVal?<?nArr[j]?)?)
    121?????????{
    122?????????????nArr[j?+?1]?=?nArr[j];????????//?后移一位
    123?????????????j--;
    124?????????}
    125?
    126?????????nArr[j?+?1]?=?nCurVal;????????????//?插入當(dāng)前元素
    127?????}
    128?}
    129?
    130?////////////////////////////////////////////////////////////////////////////////
    131?//
    132?//????1.4、快速排序
    133?//
    134?//????????快速排序的基本思想:
    135?//????????在要排序的n個(gè)元素中任取一個(gè)元素R(這里取中間元素),以該元素為基準(zhǔn),將所有
    136?//????剩下的n-1元素分為兩個(gè)子序列,第一個(gè)子序列中每個(gè)元素均小于或等于R,第二個(gè)子序
    137?//????列中每個(gè)元素均大于R;然后將R放在第一個(gè)序列之后及第二個(gè)序列之前,使得待排序
    138?//????序列成為<子序列1>?R?<子序列2>的形式,這完成了快速排序的第一趟排序;分別對(duì)子
    139?//????序列1和子序列2重復(fù)上述劃分,直到每個(gè)子序列中只有一個(gè)元素時(shí)為止。
    140?//
    141?////////////////////////////////////////////////////////////////////////////////
    142?
    143?void?Sort(?int?nArr[],?int?nLeft,?int?nRight?)
    144?{
    145?????int?i?=?nLeft,?j?=?nRight,?x,?y;
    146?
    147?????x?=?nArr[(?nLeft?+?nRight?)?/?2];
    148?
    149?????do
    150?????{
    151?????????while?(?(?nArr[i]?<?x?)?&&?(?i?<?nRight?)?)
    152?????????{
    153?????????????i++;
    154?????????}
    155?????????while?(?(?nArr[j]?>?x?)?&&?(?j?>?nLeft?)?)
    156?????????{
    157?????????????j--;
    158?????????}
    159?
    160?????????if?(?i?<=?j?)
    161?????????{
    162?????????????y?=?nArr[i];
    163?????????????nArr[i]?=?nArr[j];
    164?????????????nArr[j]?=?y;
    165?
    166?????????????i++;
    167?????????????j--;
    168?????????}
    169?????}
    170?????while?(?i?<=?j?);
    171?
    172?????if?(?nLeft?<?j?)
    173?????{
    174?????????Sort(?nArr,?nLeft,?j?);
    175?????}
    176?????if?(?nRight?>?i?)
    177?????{
    178?????????Sort(?nArr,?i,?nRight?);
    179?????}
    180?}
    181?
    182?void?QuickSort(?int?nArr[],?int?nLength?)
    183?{
    184?????Sort(?nArr,?0,?nLength?-?1?);
    185?}
    186?
    187?////////////////////////////////////////////////////////////////////////////////
    188?//
    189?//????2、查找
    190?//
    191?////////////////////////////////////////////////////////////////////////////////
    192?
    193?////////////////////////////////////////////////////////////////////////////////
    194?//
    195?//????2.1、順序查找
    196?//
    197?//????????順序查找的基本思想:
    198?//????????從第一個(gè)元素開(kāi)始,逐個(gè)地將元素與給定值X進(jìn)行比較,若相等,則查找成功;
    199?//????若直至最后一個(gè)元素都不相等,則查找失敗。
    200?//
    201?////////////////////////////////////////////////////////////////////////////////
    202?
    203?int?Search(?int?nArr[],?int?nLength,?const?int?nFindVal?)
    204?{
    205?????int?nIndex?=?-1;
    206?????int?i?=?0;
    207?
    208?????while?(?(?i?<?nLength?)?&&?(?nArr[i]?!=?nFindVal?)?)
    209?????{
    210?????????i++;
    211?????}
    212?
    213?????if?(?i?!=?nLength?)
    214?????{
    215?????????nIndex?=?i;
    216?????}
    217?
    218?????return?nIndex;
    219?}
    220?
    221?////////////////////////////////////////////////////////////////////////////////
    222?//
    223?//????2.1、折半查找
    224?//
    225?//????????折半查找的前提是所有元素是有序的,其基本思想:
    226?//????????將要查找的x先與中間位置的元素比較,若相等,則查找成功;若x大于該中間位置
    227?//????的元素,則在后半部繼續(xù)進(jìn)行折半查找,否則在前半部進(jìn)行折半查找,直到查找到成功
    228?//????或失敗為止。
    229?//
    230?////////////////////////////////////////////////////////////////////////////////
    231?
    232?int?HalfSearch(?int?nArr[],?int?nLength,?const?int?nFindVal?)
    233?{
    234?????int?nIndex?=?-1;
    235?
    236?????int?nLeft?=?0,?nRight?=?nLength?-?1;
    237?????int?nMid;
    238?
    239?????bool?bIsFind?=?false;
    240?
    241?????while?(?(?nLeft?<=?nRight?)?&&?(?!bIsFind?)?)
    242?????{
    243?????????nMid?=?(?nLeft?+?nRight?)?/?2;
    244?
    245?????????if?(?nFindVal?==?nArr[nMid]?)
    246?????????{
    247?????????????bIsFind?=?true;
    248?????????}
    249?????????else?if?(?nFindVal?>?nArr[nMid]?)
    250?????????{
    251?????????????nLeft?=?nMid?+?1;
    252?????????}
    253?????????else
    254?????????{
    255?????????????nRight?=?nMid?-?1;
    256?????????}
    257?????}
    258?
    259?????if?(?nRight?)
    260?????{
    261?????????nIndex?=?nMid;
    262?????}
    263?
    264?????return?nIndex;
    265?}
    266?
    posted on 2006-09-08 19:28 CoderDream 閱讀(462) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): 算法

    只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
    相關(guān)文章:
     

    <2006年9月>
    272829303112
    3456789
    10111213141516
    17181920212223
    24252627282930
    1234567

    常用鏈接

    留言簿(9)

    我參與的團(tuán)隊(duì)

    隨筆分類(lèi)(245)

    隨筆檔案(239)

    文章分類(lèi)(3)

    文章檔案(3)

    收藏夾(576)

    友情鏈接

    搜索

    •  

    積分與排名

    • 積分 - 459735
    • 排名 - 114

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 暖暖在线视频免费视频| 日韩午夜理论免费TV影院| 久久国产精品一区免费下载| 91短视频免费在线观看| 亚洲高清最新av网站| 亚洲综合无码一区二区| 精品国产亚洲第一区二区三区 | 成人毛片100免费观看| 91精品国产免费| 免费人妻av无码专区| 亚洲精品第五页中文字幕| 色老头综合免费视频| 精品国产污污免费网站aⅴ| 午夜亚洲av永久无码精品| 亚洲视频国产视频| 免费国产高清毛不卡片基地 | 亚洲AV无码不卡在线观看下载 | 免费VA在线观看无码| 日本免费一区二区在线观看 | 亚洲国产成人影院播放| 亚洲毛片免费视频| 久久er国产精品免费观看8| 成年女人毛片免费观看97| 久久精品亚洲一区二区| 黄页视频在线观看免费| 无码国产精品一区二区免费式直播| 亚洲国产小视频精品久久久三级| 亚洲中文字幕久久精品无码2021| EEUSS影院WWW在线观看免费| 成人激情免费视频| 91亚洲国产在人线播放午夜| 一级毛片高清免费播放| 性感美女视频在线观看免费精品 | www国产亚洲精品久久久日本| 亚洲啪啪免费视频| 热久久这里是精品6免费观看| 日本无卡码免费一区二区三区| 亚洲无成人网77777| 暖暖免费在线中文日本| 中文字幕日韩亚洲| 色婷婷亚洲一区二区三区|