• <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)計(jì)

            留言簿(13)

            閱讀排行榜

            評論排行榜

            插入排序

            今天我學(xué)習(xí)的是插入排序,插入排序主要思想是:把要排序的數(shù)字插入到已經(jīng)排好的數(shù)據(jù)中。(我自己理
            解的哈)。例如12356是已經(jīng)排好的序,我們將4插入到他們中,時(shí)插入之后也是排好序的。這里顯而易見
            是插入到3的后面。變?yōu)?23456.
            實(shí)現(xiàn)思路:插入排序就是先是一個(gè)有序的數(shù)據(jù),然后把要插入的數(shù)據(jù)插到指定的位置,而排序首先給的就
            是無序的,我們怎么確定先得到一個(gè)有序的數(shù)據(jù)呢?答案就是:如果只有一個(gè),當(dāng)然是有序的咯。我們先
            拿一個(gè)出來,他是有序的,然后把數(shù)據(jù)一個(gè)一個(gè)插入到其中,那么插入之后是有序的,所以直到最后都是
            有序的。。哈哈。結(jié)果就出來了!
            當(dāng)然在寫的時(shí)候還是有一個(gè)技巧的,不需要開額外的數(shù)組,下標(biāo)從第二個(gè)元素開始遍歷知道最后一個(gè),然
            后插入到前面已經(jīng)有序的數(shù)據(jù)中。這樣就不會(huì)浪費(fèi)空間了。插入排序用處還是很多的,特別是鏈表中,因
            為鏈表是指針存放的,沒有數(shù)組那么好準(zhǔn)確的用下標(biāo)表示,插入是簡單有效的方法。嘻嘻。。廢話少說,
            源代碼奉上:
             1 #include <stdio.h>
             2 #include <stdlib.h>
             3 
             4 //插入排序從下到大,nData為要排序的數(shù)據(jù),nNum為數(shù)據(jù)的個(gè)數(shù),該排序是穩(wěn)定的排序
             5 bool InsertionSort(int nData[], int nNum)
             6 {
             7     for (int i = 1; i < nNum; ++i)        //遍歷數(shù)組,進(jìn)行插入排序
             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個(gè)數(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ù)后移呢?
            因?yàn)榍懊娴牟糠忠呀?jīng)排好序,您若先把所有大于nTemp的數(shù)據(jù)后移,直到無數(shù)可移的時(shí)候,這個(gè)位置就是您要找的位置了,如此,就不用多做功了(數(shù)據(jù)后移與尋找位置是同時(shí)進(jìn)行的)。
            您可以參考一下別的代碼……  回復(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
            你這個(gè)程序也有問題。當(dāng)j的值為0時(shí),移位應(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ù)為升序排序
            * 時(shí)間復(fù)雜性為o(n^2),空間復(fù)雜度為O(1)
            * @param array 待排序數(shù)組
            * @param n 數(shù)組元素個(gè)數(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ù)  更多評論   

            热re99久久精品国产99热| 亚洲色欲久久久综合网东京热 | 国产精品久久久久久久久免费| 亚洲国产高清精品线久久| 久久亚洲精品无码观看不卡| 四虎国产精品免费久久5151| 天天久久狠狠色综合| 欧美激情精品久久久久| 精品久久久久久无码人妻蜜桃| 亚洲国产成人久久综合一| 久久亚洲2019中文字幕| 国产精品久久婷婷六月丁香| 久久久久久亚洲精品影院| 伊人久久无码中文字幕| 2021久久国自产拍精品| 久久免费美女视频| 久久亚洲色一区二区三区| 国内精品伊人久久久久777| 国内精品伊人久久久久av一坑| 久久免费小视频| 久久国产精品无| 国产精品美女久久久m| 久久精品国产亚洲精品| 99久久精品免费看国产一区二区三区| 日韩精品久久久久久免费| 久久香蕉一级毛片| 香蕉久久久久久狠狠色| AV狠狠色丁香婷婷综合久久| 久久久久噜噜噜亚洲熟女综合| 久久精品免费一区二区| 66精品综合久久久久久久| 免费久久人人爽人人爽av| 久久夜色精品国产亚洲| 精品国产乱码久久久久软件| 国产精品禁18久久久夂久| 久久久WWW成人免费精品| 亚洲AV无码1区2区久久| 久久天天躁狠狠躁夜夜不卡| 99久久精品国产免看国产一区| 久久这里只有精品首页| 国内精品久久久久久久涩爱 |