• <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>

            隨感而發(fā)

            雜七雜八

            統(tǒng)計

            留言簿(13)

            閱讀排行榜

            評論排行榜

            插入排序

            今天我學(xué)習(xí)的是插入排序,插入排序主要思想是:把要排序的數(shù)字插入到已經(jīng)排好的數(shù)據(jù)中。(我自己理
            解的哈)。例如12356是已經(jīng)排好的序,我們將4插入到他們中,時插入之后也是排好序的。這里顯而易見
            是插入到3的后面。變?yōu)?23456.
            實現(xiàn)思路:插入排序就是先是一個有序的數(shù)據(jù),然后把要插入的數(shù)據(jù)插到指定的位置,而排序首先給的就
            是無序的,我們怎么確定先得到一個有序的數(shù)據(jù)呢?答案就是:如果只有一個,當(dāng)然是有序的咯。我們先
            拿一個出來,他是有序的,然后把數(shù)據(jù)一個一個插入到其中,那么插入之后是有序的,所以直到最后都是
            有序的。。哈哈。結(jié)果就出來了!
            當(dāng)然在寫的時候還是有一個技巧的,不需要開額外的數(shù)組,下標(biāo)從第二個元素開始遍歷知道最后一個,然
            后插入到前面已經(jīng)有序的數(shù)據(jù)中。這樣就不會浪費空間了。插入排序用處還是很多的,特別是鏈表中,因
            為鏈表是指針存放的,沒有數(shù)組那么好準(zhǔn)確的用下標(biāo)表示,插入是簡單有效的方法。嘻嘻。。廢話少說,
            源代碼奉上:
             1 #include <stdio.h>
             2 #include <stdlib.h>
             3 
             4 //插入排序從下到大,nData為要排序的數(shù)據(jù),nNum為數(shù)據(jù)的個數(shù),該排序是穩(wěn)定的排序
             5 bool InsertionSort(int nData[], int nNum)
             6 {
             7     for (int i = 1; i < nNum; ++i)        //遍歷數(shù)組,進行插入排序
             8     {
             9         int nTemp = nData[i];
            10         for (int j = 0; j < i; ++j)        //對該數(shù),尋找他要插入的位置
            11         {
            12             if (nData[j] > nTemp)    //找到位置,然后插入該位置,之后的數(shù)據(jù)后移
            13             {
            14                 for (int k = i; k > j; --k)    //數(shù)據(jù)后移
            15                 {
            16                     nData[k] = nData[k -1];
            17                 }
            18                 nData[j] = nTemp;        //將數(shù)據(jù)插入到指定位置
            19                 break;
            20             }
            21         }
            22     }
            23 
            24     return true;
            25 }
            26 
            27 int main()
            28 {
            29     int nData[10= {4,10,9,8,7,6,5,4,3,2};    //創(chuàng)建10個數(shù)據(jù),測試
            30     InsertionSort(nData, 10);        //調(diào)用插入排序
            31 
            32     for (int i = 0; i < 10++i)        
            33     {
            34         printf("%d ", nData[i]);
            35     }
            36 
            37     printf("\n");
            38     system("puase");
            39     return 0;
            40 }


            posted on 2009-03-31 10:25 shongbee2 閱讀(12360) 評論(8)  編輯 收藏 引用 所屬分類: 數(shù)據(jù)結(jié)構(gòu)和算法

            評論

            # re: 插入排序 2009-11-05 10:13 yujunfei_xy

            為什么您要先找到該位置,然后才把其他數(shù)據(jù)后移呢?
            因為前面的部分已經(jīng)排好序,您若先把所有大于nTemp的數(shù)據(jù)后移,直到無數(shù)可移的時候,這個位置就是您要找的位置了,如此,就不用多做功了(數(shù)據(jù)后移與尋找位置是同時進行的)。
            您可以參考一下別的代碼……  回復(fù)  更多評論   

            # re: 插入排序 2010-06-28 20:41 kaira

            循環(huán)太多  回復(fù)  更多評論   

            # re: 插入排序 2010-06-28 20:48 kaira

            void Insert_sort(int n)
            {
            int i,j;
            for(i=2;i<=n;i++)
            if(R[i]<R[i-1])
            {
            R[0]=R[i];j=i-1;
            do{
            R[j+1]=R[j];
            j--;

            }while(R[0]<R[l]);
            R[j+1]=R[0];
            }
            }
            感覺比你的藥好  回復(fù)  更多評論   

            # re: 插入排序 2010-06-28 20:49 kaira

            void Insert_sort(int n)
            {
            int i,j;
            for(i=2;i<=n;i++)
            if(R[i]<R[i-1])
            {
            R[0]=R[i];j=i-1;
            do{
            R[j+1]=R[j];
            j--;

            }while(R[0]<R[J]);
            R[j+1]=R[0];
            }
            }   回復(fù)  更多評論   

            # re: 插入排序[未登錄] 2011-02-21 15:10 Randy

            可以把循環(huán)合并一下。
            int insertsort(int* idata, int len)
            {
            for (int i=1; i<len; ++i)
            {
            for (int j=i; j>0 && idata[j-1]>idata[j]; --j)
            {
            int temp = idata[j];
            idata[j] = idata[j-1];
            idata[j-1] = temp;
            }
            }
            return 0;
            }  回復(fù)  更多評論   

            # re: 插入排序 2011-05-17 12:49 guo

            @kaira
            你這個程序也有問題。當(dāng)j的值為0時,移位應(yīng)該結(jié)束。所以還應(yīng)該加上邊界判斷。
            我修改了下,您看怎么樣?
            for (i = 1;i<nNum;i++)
            {
            if (nData[i] < nData[i-1])
            {
            temp = nData[i];
            for (j = i-1; j>=0; j--)
            {
            if (temp < nData[j])
            nData[j+1] = nData[j];
            else
            break;
            }
            nData[j+1] = temp; //插入數(shù)據(jù)

            }

            }  回復(fù)  更多評論   

            # re: 插入排序 2012-03-16 00:12 馮燕輝

            /**
            * 直接插入排序?qū)儆诜€(wěn)定的排序,此函數(shù)為升序排序
            * 時間復(fù)雜性為o(n^2),空間復(fù)雜度為O(1)
            * @param array 待排序數(shù)組
            * @param n 數(shù)組元素個數(shù)
            */
            void insertion_sort(int array[], int n)
            {
            for(int i = 1; i < n; ++i)
            {
            int j;
            int key = array[i];
            for(j = i - 1; j >= 0 &&
            array[j] > key; //升序
            //array[j] > key; //降序
            --j)
            array[j+1] = array[j];
            array[j+1] = key;
            }
            }  回復(fù)  更多評論   

            # re: 插入排序[未登錄] 2013-09-17 11:02 dd

            int InsertionSort(int list[], int n)
            {
            int i , j;
            int next;
            for (i = 1; i < n; i ++){
            next = list[i];
            for(j = i-1; j >=0 && next < list[j] ;j--){
            list[j+1] = list[j];
            }
            list[j+1] = next;
            }
            }  回復(fù)  更多評論   

            欧美牲交A欧牲交aⅴ久久| 2021最新久久久视精品爱| 精品免费久久久久久久| 久久久国产精品网站| 久久精品三级视频| 77777亚洲午夜久久多喷| 国内精品久久久久伊人av| 国产成人精品久久亚洲高清不卡 | 国产A三级久久精品| 波多野结衣久久一区二区| av午夜福利一片免费看久久| 国产精品无码久久久久| 亚洲中文字幕无码久久2020| 国产精品成人99久久久久| 亚洲AV日韩精品久久久久久| 国产精品永久久久久久久久久| 欧美精品丝袜久久久中文字幕| 欧美日韩精品久久久免费观看| 四虎国产精品成人免费久久| 国产美女久久久| 久久久久久精品免费看SSS| 99久久国产亚洲高清观看2024| 亚洲午夜久久久久久噜噜噜| 精品国际久久久久999波多野| 思思久久99热只有频精品66| 久久精品国产久精国产思思| 亚洲午夜无码AV毛片久久| 94久久国产乱子伦精品免费 | 久久亚洲精品人成综合网| 久久精品一区二区国产| 热久久国产欧美一区二区精品| 国产精品成人久久久久久久| 日韩精品久久久久久免费| 热99RE久久精品这里都是精品免费 | 久久婷婷国产剧情内射白浆| 91亚洲国产成人久久精品| 久久久精品午夜免费不卡| 国产精品久久久久久搜索| 久久免费小视频| 国产精品免费福利久久| 久久精品国产久精国产|