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

            隨感而發

            雜七雜八

            統計

            留言簿(13)

            閱讀排行榜

            評論排行榜

            插入排序

            今天我學習的是插入排序,插入排序主要思想是:把要排序的數字插入到已經排好的數據中。(我自己理
            解的哈)。例如12356是已經排好的序,我們將4插入到他們中,時插入之后也是排好序的。這里顯而易見
            是插入到3的后面。變為123456.
            實現思路:插入排序就是先是一個有序的數據,然后把要插入的數據插到指定的位置,而排序首先給的就
            是無序的,我們怎么確定先得到一個有序的數據呢?答案就是:如果只有一個,當然是有序的咯。我們先
            拿一個出來,他是有序的,然后把數據一個一個插入到其中,那么插入之后是有序的,所以直到最后都是
            有序的。。哈哈。結果就出來了!
            當然在寫的時候還是有一個技巧的,不需要開額外的數組,下標從第二個元素開始遍歷知道最后一個,然
            后插入到前面已經有序的數據中。這樣就不會浪費空間了。插入排序用處還是很多的,特別是鏈表中,因
            為鏈表是指針存放的,沒有數組那么好準確的用下標表示,插入是簡單有效的方法。嘻嘻。。廢話少說,
            源代碼奉上:
             1 #include <stdio.h>
             2 #include <stdlib.h>
             3 
             4 //插入排序從下到大,nData為要排序的數據,nNum為數據的個數,該排序是穩定的排序
             5 bool InsertionSort(int nData[], int nNum)
             6 {
             7     for (int i = 1; i < nNum; ++i)        //遍歷數組,進行插入排序
             8     {
             9         int nTemp = nData[i];
            10         for (int j = 0; j < i; ++j)        //對該數,尋找他要插入的位置
            11         {
            12             if (nData[j] > nTemp)    //找到位置,然后插入該位置,之后的數據后移
            13             {
            14                 for (int k = i; k > j; --k)    //數據后移
            15                 {
            16                     nData[k] = nData[k -1];
            17                 }
            18                 nData[j] = nTemp;        //將數據插入到指定位置
            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};    //創建10個數據,測試
            30     InsertionSort(nData, 10);        //調用插入排序
            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)  編輯 收藏 引用 所屬分類: 數據結構和算法

            評論

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

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

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

            循環太多  回復  更多評論   

            # 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];
            }
            }
            感覺比你的藥好  回復  更多評論   

            # 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];
            }
            }   回復  更多評論   

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

            可以把循環合并一下。
            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;
            }  回復  更多評論   

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

            @kaira
            你這個程序也有問題。當j的值為0時,移位應該結束。所以還應該加上邊界判斷。
            我修改了下,您看怎么樣?
            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; //插入數據

            }

            }  回復  更多評論   

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

            /**
            * 直接插入排序屬于穩定的排序,此函數為升序排序
            * 時間復雜性為o(n^2),空間復雜度為O(1)
            * @param array 待排序數組
            * @param n 數組元素個數
            */
            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;
            }
            }  回復  更多評論   

            # 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;
            }
            }  回復  更多評論   

            色婷婷综合久久久久中文字幕 | 久久精品国产只有精品66| 亚洲AV日韩精品久久久久久| 97精品国产97久久久久久免费| 午夜久久久久久禁播电影| 久久国产精品无码HDAV| 久久久精品国产| 欧洲人妻丰满av无码久久不卡| 亚洲国产精品久久久久婷婷老年| 国产综合精品久久亚洲| 亚洲精品乱码久久久久66| 青青草原综合久久大伊人精品| 尹人香蕉久久99天天拍| 久久精品国内一区二区三区| 精品久久久久中文字| 久久国产精品99精品国产| 亚洲精品国精品久久99热| 久久99国产精品久久99| 一本色道久久88精品综合| 91精品婷婷国产综合久久| 无码AV中文字幕久久专区| 久久久久黑人强伦姧人妻| 精品久久久久久国产91| 久久亚洲AV成人无码软件| 久久久WWW免费人成精品| 99久久精品费精品国产| 久久99国产精品尤物| 久久精品国产99久久久| 亚洲精品无码成人片久久| 热99RE久久精品这里都是精品免费 | 亚洲欧美伊人久久综合一区二区 | 国内精品久久久久久99| 免费久久人人爽人人爽av| 99久久精品费精品国产| 国产精品免费看久久久香蕉| 久久中文骚妇内射| 99久久精品国产一区二区| 久久99热这里只有精品66| 亚洲精品久久久www| 久久精品国产日本波多野结衣| 思思久久99热只有频精品66|