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

            2021国内久久精品| 久久久久久久波多野结衣高潮| 久久精品国产一区二区三区| 性高朝久久久久久久久久| 久久国产福利免费| 一级女性全黄久久生活片免费 | 国产一级持黄大片99久久| 婷婷综合久久中文字幕| 蜜桃麻豆WWW久久囤产精品| 国产成人久久精品区一区二区| 国产视频久久| 国产亚洲精久久久久久无码| 久久影视综合亚洲| 青青青国产精品国产精品久久久久| 亚洲精品NV久久久久久久久久| 久久99国产精品一区二区| 国产精品久久久久a影院| 国产精自产拍久久久久久蜜| 精品国产乱码久久久久久1区2区| 久久人人爽人人爽AV片| 欧美日韩中文字幕久久伊人| av无码久久久久久不卡网站| 伊人久久精品无码二区麻豆| 久久经典免费视频| 午夜精品久久久久久久无码| 品成人欧美大片久久国产欧美| 国产精品久久久久影院色| 无码人妻久久一区二区三区免费| 久久99热这里只有精品66| 欧美激情精品久久久久久| 精品久久综合1区2区3区激情| 99国产精品久久| 亚洲国产精品一区二区久久| 久久99久久99小草精品免视看| 狠狠色丁香婷综合久久| 人人狠狠综合久久亚洲88| 日韩亚洲欧美久久久www综合网 | 亚洲国产美女精品久久久久∴ | 精品一二三区久久aaa片| 亚洲成av人片不卡无码久久| 亚洲欧美久久久久9999|