• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆 - 26  文章 - 6  trackbacks - 0
            <2009年5月>
            262728293012
            3456789
            10111213141516
            17181920212223
            24252627282930
            31123456

            常用鏈接

            留言簿(3)

            隨筆分類(lèi)

            隨筆檔案

            朋友

            • cqh
            • 大學(xué)室友...

            搜索

            •  

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

             

            #include <iostream>
            #include 
            <assert.h>
            using namespace std;

            const int MAXN = 1020;


            /**
            * @brief 選擇排序(不穩(wěn)定)
            * @param nX        需要排序的數(shù)值
            * @param nNum    數(shù)值的長(zhǎng)度
            * @return true    代表處理成功
            */

            bool select_sort(int *nX, int nNum)
            {
                assert(nX 
            != NULL && nNum >= 1);
                
            int i, j, nMin;
                
            for (i = 0; i < nNum - 1; i++)
                
            {
                    nMin 
            = i;
                    
            for (j = i+1; j < nNum; j++)
                    
            {
                        
            if (nX[j] < nX[nMin])
                        
            {
                            nMin 
            = j;
                        }

                    }

                    
            if (nMin != i)
                    
            {
                        swap(nX[nMin], nX[i]);
                    }

                }

                
            return true;
            }
             


            /**
            * @brief 插入排序(穩(wěn)定)
            * @param nX        需要排序的數(shù)值
            * @param nNum    數(shù)值的長(zhǎng)度
            * @return true    代表處理成功
            */

            bool insert_sort(int *nX, int nNum)
            {
                assert(nX 
            != NULL && nNum >= 1);
                
            int i, j, nTmp;
                
            for (i = 1; i < nNum; i++)
                
            {
                    nTmp 
            = nX[i];
                    
            for (j = i-1; j >= 0 && nTmp < nX[j]; j--)
                    
            {
                        nX[j
            +1= nX[j];
                    }

                    nX[j
            +1= nTmp;
                }

                
            return true;
            }
             


            /**
            * @brief 冒泡排序(穩(wěn)定)
            * @param nX        需要排序的數(shù)值
            * @param nNum    數(shù)值的長(zhǎng)度
            * @return true    代表處理成功
            */

            bool bubble_sort(int *nX, int nNum)
            {
                assert(nX 
            != NULL && nNum >= 1);
                
            int i, j;
                
            for (i = nNum - 1; i >= 0; i--)
                
            {
                    
            for (j = 0; j < i; j++)
                    
            {
                        
            if(nX[j] > nX[j+1])
                            swap(nX[j], nX[j
            +1]);
                    }

                }

                
            return true;
            }
             



            /**
            * @brief 希爾排序(不穩(wěn)定)
            * @param nX        需要排序的數(shù)值
            * @param nNum    數(shù)值的長(zhǎng)度
            * @return true    代表處理成功
            */

            bool shell_sort(int *nX, int nNum)
            {
                assert(nX 
            != NULL && nNum >= 1);
                
            int i, j, nH, nTmp;
                
            for (nH = nNum/2; nH > 0; nH /= 2)
                
            {
                    
            //n - nH 趟冒泡
                    for (i = nH; i < nNum; i++)
                    
            {
                        
            //一趟冒泡
                        nTmp = nX[i];
                        
            for (j = i-nH; j >= 0 && nTmp < nX[j]; j -= nH)
                        
            {
                            nX[j
            +nH] = nX[j];
                        }

                        nX[j
            +nH] = nTmp;
                    }

                }

                
            return true;
            }



            /**
            * @brief 快速排序(不穩(wěn)定)
            * @param nX        需要排序的數(shù)值
            * @param nLow    開(kāi)始元素的下標(biāo)
            * @param nHigh    結(jié)束元素的下標(biāo)
            */

            void quick_sort(int *nX, int nLow, int nHigh)
            {
                assert(nX 
            != NULL);

                
            if (nLow >= nHigh)
                
            {
                    
            return ;
                }


                
            int nTmp, i = nLow, j = nHigh;
                nTmp 
            = nX[nLow];
                
            while (i < j)
                
            {
                    
            while (i < j && nX[j] >= nTmp)
                    
            {
                        j
            --;
                    }

                    nX[i] 
            = nX[j];
                    
            while (i < j && nX[i] <= nTmp)
                    
            {
                        i
            ++;
                    }

                    nX[j] 
            = nX[i];
                }

                nX[i] 
            = nTmp;

                quick_sort(nX, nLow,  i
            -1);
                quick_sort(nX, i
            +1, nHigh);
            }




            /**
            * @brief 建最大堆
            * @param nX        需要排序的數(shù)值
            * @param nNum    數(shù)值的長(zhǎng)度
            * @param nStart    從第幾個(gè)元素開(kāi)始
            * @return true    代表處理成功
            */

            void sift(int *nX, int nNum, int nStart)
            {
                assert(nX 
            != NULL && nNum >= 1);
                
            int nTmp, k, j;
                nTmp 
            = nX[nStart];
                k 
            = nStart;
                j 
            = 2*+ 1;
                
            while (j < nNum)
                
            {
                    
            //選擇子節(jié)點(diǎn)較大的
                    if (j < nNum -1 && nX[j] < nX[j+1])
                    
            {
                        j
            ++;
                    }

                    
            //向下調(diào)整
                    if (nTmp < nX[j])
                    
            {
                        nX[k] 
            = nX[j];
                        k 
            = j;
                        j 
            = 2*+ 1;
                    }

                    
            else
                    
            {
                        
            break;
                    }

                }

                nX[k] 
            = nTmp;
            }


            /**
            * @brief 堆排序(不穩(wěn)定)
            * @param nX        需要排序的數(shù)值
            * @param nNum    數(shù)值的長(zhǎng)度
            * @return true    代表處理成功
            */

            bool heap_sort(int *nX, int nNum)
            {
                assert(nX 
            != NULL && nNum >= 1);
                
            int i, k;
                
            for (i = nNum/2-1; i >= 0; i--)
                
            {
                    sift(nX, nNum, i);
                }


                
            for (k = nNum-1; k >= 1; k--)
                
            {
                    swap(nX[
            0], nX[k]);
                    sift(nX, k, 
            0);
                }

                
            return true;
            }



            /**
            * @brief 將nX[]的[nLow, nMiddle]和[nMiddle+1, nHigh]合并,并保存到nB[]中
            * @param nX    源數(shù)組
            * @param nB 目的數(shù)組
            * @param nLow    開(kāi)始元素的下標(biāo)
            * @param nMiddle 中間下標(biāo)
            * @param nHigh    結(jié)束元素的下標(biāo)
            */

            void merge(int *nX, int *nB, int nLow, int nMiddle, int nHigh)
            {
                
            int i = nLow, j = nMiddle + 1, k = nLow;
                
            while ((i <= nMiddle) && (j <= nHigh))
                
            {
                    
            if (nX[i] <= nX[j])
                    
            {
                        nB[k
            ++= nX[i++];
                    }

                    
            else
                    
            {
                        nB[k
            ++= nX[j++];
                    }

                }


                
            if (i > nMiddle)
                
            {
                    
            for (int q = j; q <= nHigh; q++)
                    
            {
                        nB[k
            ++= nX[q];
                    }

                }

                
            else
                
            {
                    
            for (int q = i; q <= nMiddle; q++)
                    
            {
                        nB[k
            ++= nX[q];
                    }

                }

            }


            /**
            * @brief 將nB[]復(fù)制到nX[] (從nLow到nHigh)
            * @param nX    目的數(shù)組
            * @param nB 源數(shù)組
            * @param nLow    開(kāi)始元素的下標(biāo)
            * @param nHigh    結(jié)束元素的下標(biāo)
            */

            void copy(int *nX, int *nB, int nLow, int nHigh)
            {
                
            int i = 0;
                
            for (i = nLow; i <= nHigh; i++)
                
            {
                    nX[i] 
            = nB[i];
                }

            }


            /**
            * @brief 合并排序(不穩(wěn)定)
            * @param nLow    開(kāi)始元素的下標(biāo)
            * @param nHigh    結(jié)束元素的下標(biāo)
            */

            void merge_sort(int *nX, int nLow, int nHigh)
            {
                assert(nX 
            != NULL);
                
                
            if (nLow < nHigh)
                
            {
                    
            int i = (nLow + nHigh)/2;
                    merge_sort(nX, nLow, i);
                    merge_sort(nX, i
            +1, nHigh);
                    
            int nB[MAXN];
                    merge(nX, nB, nLow, i, nHigh);
                    copy(nX, nB, nLow, nHigh);
                }

            }

            posted on 2009-09-27 20:55 longshen 閱讀(343) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): 程序員
            精品久久久久中文字幕一区| 久久久久久国产a免费观看黄色大片 | 久久久久久久综合综合狠狠| 久久久久综合中文字幕| 思思久久99热免费精品6| 少妇人妻88久久中文字幕| 久久―日本道色综合久久| 无码国内精品久久综合88| 久久天天躁狠狠躁夜夜网站| 狠狠色综合网站久久久久久久| 区久久AAA片69亚洲| 99久久精品免费国产大片| 亚洲AV无码一区东京热久久| 热99re久久国超精品首页| 伊人久久精品无码二区麻豆| 韩国无遮挡三级久久| 精品综合久久久久久98| 国产精品九九久久免费视频 | 久久久噜噜噜久久| 高清免费久久午夜精品| 狠狠色婷婷久久综合频道日韩 | 久久香蕉国产线看观看猫咪?v| 色综合久久无码中文字幕| 久久久久久国产精品美女| 久久r热这里有精品视频| 婷婷伊人久久大香线蕉AV| 亚洲国产成人精品无码久久久久久综合| 久久久久久久97| 久久精品国产亚洲av麻豆小说| 久久精品国产亚洲av麻豆图片| 武侠古典久久婷婷狼人伊人| 国产综合免费精品久久久| 99久久婷婷国产综合精品草原| 国产V亚洲V天堂无码久久久| 久久av无码专区亚洲av桃花岛| 久久精品亚洲精品国产色婷| 亚洲色婷婷综合久久| 精品久久久久久无码专区| 久久国产欧美日韩精品| 久久亚洲国产中v天仙www| 天天爽天天爽天天片a久久网|