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

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

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

    ChenGen

    一切歸零,重新開始
    隨筆 - 13, 文章 - 10, 評論 - 21, 引用 - 0
    數(shù)據(jù)加載中……

    復(fù)習排序算法

    ???學院的保送研究生復(fù)試馬上就要開始了,復(fù)試中最能拉開距離的就是筆試,這也是我發(fā)揮個人能力的地方。為了萬無一失,我準備這幾天復(fù)習一下數(shù)據(jù)結(jié)構(gòu),今天復(fù)習的內(nèi)容是排序算法。

    ???一般的排序算法大體上分為三類——插入排序、交換排序和選擇排序。

    ???插入排序的基本思想是將第N個記錄插入到前面(N-1)個有序的記錄當中。直接插入排序、折半插入排序和系爾排序都是屬于插入排序。

    ???直接插入排序:

    ?1 void ?InsertSort(RcdType?r[], int ?n)
    ?2 {
    ?3 ???? int ?i,j;
    ?4 ???? for (i = 2 ;i <= n;i ++ ) {
    ?5 ????????r[ 0 ] = r[i];
    ?6 ????????j = i - 1 ;
    ?7 ???????? while (r[ 0 ].key < r[j].key) {
    ?8 ????????????r[j + 1 ] = r[j];
    ?9 ????????????j -- ;
    10 ????????}

    11 ????????r[j + 1 ] = r[ 0 ];
    12 ????}
    ????
    13 }

    ???折半插入排序:

    ?1 void ?BinSort(RcdType?r[], int ?n)
    ?2 {
    ?3 ???? int ?i,j,mid,low,high;
    ?4 ???? for (i = 2 ;i <= n;i ++ ) {
    ?5 ????????r[ 0 ] = r[i];
    ?6 ????????low = 1 ;
    ?7 ????????high = i - 1 ;
    ?8 ???????? while (low <= high) {
    ?9 ????????????mid = (low + high) / 2 ;
    10 ???????????? if (r[ 0 ].key < r[mid].key)?high = mid - 1 ;
    11 ???????????? else ?low = mid + 1 ;
    12 ????????}

    13 ???????? for (j = i - 1 ;j >= low;j -- )?
    14 ????????????r[j + 1 ] = r[j];
    15 ????????r[low] = r[ 0 ];
    16 ????}

    17 }

    ???交換排序算法的基本思想是按照某種順序比較兩個記錄的關(guān)鍵字大小,然后根據(jù)需要交換兩個記錄的位置。冒泡排序和快速排序都是屬于交換排序。

    ???冒泡排序:

    ?1 void ?BubbleSort(RcdType?r[], int ?n)
    ?2 {
    ?3 ???? int ?i,j,flag;
    ?4 ???? for (i = 1 ;i < n;i ++ ) {
    ?5 ????????flag = 1 ;
    ?6 ???????? for (j = 1 ;j <= n - i;j ++ ) {
    ?7 ???????????? if (r[j + 1 ].key < r[j].key) {
    ?8 ????????????????falg = 0 ;
    ?9 ????????????????r[ 0 ] = r[j];
    10 ????????????????r[j] = r[j + 1 ];
    11 ????????????????r[j + 1 ] = r[ 0 ];
    12 ????????????}

    13 ????????}

    14 ???????? if (flag)? break ;
    15 ????}

    16 }

    ???快速排序:

    ?1 void ?QuickSort(RcdType?r[], int ?low, int ?high)
    ?2 {
    ?3 ???? int ?i,j;
    ?4 ????i = low;
    ?5 ????j = high;
    ?6 ????r[ 0 ] = r[i];
    ?7 ???? while (i < j) {
    ?8 ???????? while (i < j? && ?r[j].key >= r[ 0 ].key)?j -- ;
    ?9 ???????? if (i < j)?r[i ++ ] = r[j];
    10 ???????? while (i < j? && ?r[i].key <= r[ 0 ].key)?i ++ ;
    11 ???????? if (i < j)?r[j -- ] = r[ 0 ];
    12 ????}

    13 ????r[i] = r[ 0 ];
    14 ???? if (low < i - 1 )?QuickSort(r,low,i - 1 );
    15 ???? if (high > i + 1 )?QuickSort(r,i + 1 ,high);
    16 }

    ???選擇排序算法的思想是根據(jù)某中方法選擇一個關(guān)鍵字最大的記錄或者關(guān)鍵字最小的記錄,放到適當?shù)奈恢谩:唵芜x擇排序和堆排序都是屬于選擇排序算法。

    ???簡單選擇排序:

    ?1 void ?SelectSort(RcdType?r[], int ?n)
    ?2 {
    ?3 ???? int ?i,j,p;
    ?4 ???? for (i = 1 ;i < n;i ++ ) {
    ?5 ????????p = i;
    ?6 ???????? for (j = i + 1 ;j <= n;j ++ ) {
    ?7 ???????????? if (r[j].key < r[p].key)?p = j;
    ?8 ????????}

    ?9 ???????? if (p != i) {
    10 ????????????r[ 0 ] = r[p];
    11 ????????????r[p] = r[i];
    12 ????????????r[i] = r[ 0 ];
    13 ????????}

    14 ????}

    15 }

    ???堆排序:

    ?1 void ?Heap(RcdType?r[], int ?i, int ?m)
    ?2 {
    ?3 ???? int ?j;
    ?4 ????j = 2 * i;
    ?5 ????r[ 0 ] = r[i];
    ?6 ???? while (j <= m) {
    ?7 ???????? if (j < m? && ?r[j + 1 ].key < r[j].key)?j ++ ;
    ?8 ???????? if (r[j].key < r[ 0 ].key) {
    ?9 ????????????r[i] = r[j];
    10 ????????????i = j;
    11 ????????????j = i * 2 ;
    12 ????????}
    else {
    13 ????????????j = m + 1 ;
    14 ????????}

    15 ????}

    16 ????r[i] = r[ 0 ];
    17 }

    18
    19 void ?HeapSort(RcdType?r[], int ?n)
    20 {
    21 ???? int ?i,j;
    22 ???? // 初始化堆
    23 ???? for (i = n / 2 ;i >= 1 ;i -- ) {
    24 ????????Heap(r,i,n);
    25 ????}

    26 ???? // 輸出
    27 ???? for (i = n;i >= 1 ;i -- ) {
    28 ????????printf( " %d\t " ,r[ 1 ].key);
    29 ????????r[ 1 ] = r[i];
    30 ????????Heap(r, 1 ,i - 1 );
    31 ????}

    32 }



    ?

    posted on 2006-09-25 16:01 ChenGen 閱讀(1382) 評論(5)  編輯  收藏 所屬分類: 數(shù)據(jù)結(jié)構(gòu)復(fù)習

    評論

    # re: 復(fù)習排序算法  回復(fù)  更多評論   

    給blogjava提一個建議:

    發(fā)到首頁的文章做如下限制:
    1. 如果blog主已經(jīng)在blogjava攢了幾篇文章,而且寫得還不錯,如“江南白衣”之流,可以直接發(fā)到首頁上。
    2. 否則,管理員先大概的審核一下。

    大家覺得?
    2006-09-25 16:13 | 深藍色心情

    # re: 復(fù)習排序算法  回復(fù)  更多評論   

    這是真的好東西,多放些上來。
    2006-09-25 16:14 | 壞男孩

    # re: 復(fù)習排序算法  回復(fù)  更多評論   

    管理員本來就是會做審核的啊
    2006-09-25 19:08 | 小小涼粉

    # re: 復(fù)習排序算法  回復(fù)  更多評論   

    BlogJava采用的是發(fā)表后審核,發(fā)現(xiàn)不合適的文章會從首頁移走。
    2006-09-26 10:16 | dudu

    # re: 復(fù)習排序算法  回復(fù)  更多評論   

    那是,首頁還是要以JAVA技術(shù)為主,這是原則。
    只是dudu是否能考慮允許數(shù)據(jù)庫語言SQL的進入呢?
    畢竟SQL是項目的基礎(chǔ),與JAVA技術(shù)而言也是必須的啊
    我不是太了解這個網(wǎng)站的目標是什么?但我希望它能成為
    一個一站式的項目幫助網(wǎng)站。
    2006-09-27 08:38 | 冰川
    主站蜘蛛池模板: 日本xxxx色视频在线观看免费| 久久久久久亚洲av成人无码国产| 最近2019中文字幕免费直播| 精品亚洲视频在线| 亚洲福利一区二区三区| 国产AV无码专区亚洲AV手机麻豆| 日本不卡在线观看免费v| 久久九九兔免费精品6| 国产无遮挡裸体免费视频在线观看| 色偷偷亚洲男人天堂| 亚洲中文无码亚洲人成影院| 亚洲尹人香蕉网在线视颅| 中文字幕第13亚洲另类| 免费人成网站在线播放| 成人免费看吃奶视频网站| 国产成人精品免费视频大| 97在线视频免费播放| 免费人成黄页在线观看日本| 九九热久久免费视频| 免费无毒a网站在线观看| 老子影院午夜伦不卡亚洲| 亚洲色www永久网站| 国产午夜亚洲精品| 亚洲人成电影在线观看青青| 亚洲视频在线不卡| 激情内射亚洲一区二区三区| 亚洲网址在线观看你懂的| 久久精品国产亚洲沈樵| 亚洲色精品aⅴ一区区三区| 久久久久国产成人精品亚洲午夜| 一区国严二区亚洲三区| 免费人成视频x8x8入口| 亚洲成人一区二区| 亚洲男人天堂2020| 国产亚洲成人久久| 亚洲人成网站在线观看播放| 在线亚洲人成电影网站色www | 亚洲精品自拍视频| 亚洲精品美女在线观看播放| 亚洲邪恶天堂影院在线观看| 911精品国产亚洲日本美国韩国|