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

            閱讀排行榜

            評論排行榜

            選擇排序

            今天學習了選擇排序,選擇排序和冒泡排序思路上有一點相似,都是先確定最小元素,再確定第二笑元素,最后確定最大元素。他的主要流程如下:

            1.加入一個數組A = {5,3,6,2,4,7},我們對他進行排序

            2.確定最小的元素放在A[0]位置,我們怎么確定呢,首先默認最小元素為5,他的索引為0,然后用它跟3比較,比他打,則認為最小元素為3,他的索引為1,然后用3跟6比,發現比他小,最小元素還是3,然后跟2比,最小元素變成了2,索引為3,然后跟4比,跟7比。當比較結束之后,最小元素也塵埃落定了。就是2,索引為3,然后我們把他放在A[0]處。為了使A[0]原有數據部丟失,我們使A[0](要放的位置) 與A[3](最小數據的位置)交換。這樣就不可以了嗎?

            3.然后我們在來找第二小元素,放在A[1],第三小元素,放在A[2]。。當尋找完畢,我們排序也就結束了。

            4.不過,在找的時候要注意其實位置,不能在找A[2]的時候,還用A[2]的數據跟已經排好的A[0],A[1]比,一定要跟還沒有確定位置的元素比。還有一個技巧就是我們不能每次都存元素值和索引,我們只存索引就可以了,通過索引就能找到元素了。呵呵。

            5.他和冒泡的相似和區別,冒泡和他最大的區別是他發現比他小就交換,把小的放上面,而選擇是選擇到最小的在直接放在確定的位置。選擇也是穩定的排序。

            基本思路就這樣了,奉上源代碼:

            #include <stdio.h>
            #include 
            <stdlib.h>

            //選擇排序, pnData要排序的數據, nLen數據的個數
            int SelectSort(int* pnData, int nLen)
            {
                
            //i從[0,nLen-1)開始選擇,確定第i個元素
                for (int i = 0; i < nLen - 1++i)
                {
                    
            int nIndex = i;

                    
            //遍歷剩余數據,選擇出當前最小的數據
                    for (int j = i + 1; j < nLen; ++j)
                    {
                        
            if (pnData[j] < pnData[nIndex])    
                        {
                            nIndex 
            = j;
                        }
                    }

                    
            //如果當前最小數據索引不是i,也就是說排在i位置的數據在nIndex處
                    if (nIndex != i)        
                    {
                        
            //交換數據,確定i位置的數據。
                        int nTemp = pnData[i];
                        pnData[i] 
            = pnData[nIndex];
                        pnData[nIndex] 
            = nTemp;
                    }
                }

                
            return 1;
            }

            int main()
            {
                
            int nData[10= {4,10,9,8,7,6,5,4,3,2};    //創建10個數據,測試
                SelectSort(nData, 10);        //調用選擇排序

                
            for (int i = 0; i < 10++i)        
                {
                    printf(
            "%d ", nData[i]);
                }

                printf(
            "\n");
                system(
            "pause");
                
            return 0;
            }

            posted on 2009-04-25 15:51 shongbee2 閱讀(10971) 評論(5)  編輯 收藏 引用 所屬分類: 數據結構和算法

            評論

            # re: 選擇排序 2009-12-15 15:48 兩京夢華

            我覺得你的代碼中的變量nIndex 是屬于冗余的,條件if (pnData[j] < pnData[nIndex]) 和 if (nIndex != i) 也是屬于重復。
            上面的代碼等同于:
            //選擇排序, pnData要排序的數據, nLen數據的個數
            int SelectSort(int* pnData, int nLen)
            {
            //i從[0,nLen-1)開始選擇,確定第i個元素
            for (int i = 0; i < nLen - 1; ++i)
            {
            //遍歷剩余數據,選擇出當前最小的數據
            for (int j = i + 1; j < nLen; ++j)
            {
            if (pnData[j] < pnData[i])
            {
            int nTemp = pnData[i];
            pnData[i] = pnData[j];
            pnData[j] = nTemp;
            }
            }

            }

            return 1;
            }
              回復  更多評論   

            # re: 選擇排序 2010-04-25 09:50 吼吼

            @兩京夢華
            頻繁交換數據,使排序復雜化了,應記住索引,即每趟選出最小數的索引,然后進行交換,這樣每趟只需交換一次數據。  回復  更多評論   

            # re: 選擇排序 2010-08-23 17:33 geoffrey

            注意哦,樓主的方法是不穩定的排序。。  回復  更多評論   

            # re: 選擇排序 2012-10-11 11:18 kavensu

            選擇怎么會是穩定的呢?
            如果對5、8、5、2、9排序。這兩個5 排序前后的相對位置改變了。  回復  更多評論   

            # re: 選擇排序 2013-10-29 10:20 coderchen

            @kavensu
            對,我也認為選擇排序是不穩定的。
            例如1,4,3,4,2,5
            這樣就造成了第一個4和第一個2交換,所以是不穩定的。  回復  更多評論   

            AV无码久久久久不卡网站下载| 亚洲国产天堂久久久久久| 无码任你躁久久久久久老妇| 国产精品美女久久久网AV| 亚州日韩精品专区久久久| 亚洲色欲久久久综合网| 日韩人妻无码精品久久免费一| 欧美日韩精品久久久久| 无码人妻精品一区二区三区久久| 久久久精品人妻一区二区三区蜜桃 | 国产无套内射久久久国产| 久久久久国色AV免费看图片| 亚洲精品WWW久久久久久| 99久久精品午夜一区二区| 很黄很污的网站久久mimi色| 一本色道久久99一综合| 久久青青国产| 91久久精品国产成人久久| 一本久久知道综合久久| 欧美激情精品久久久久久| 久久国产精品久久精品国产| 久久精品国产亚洲AV香蕉| 久久精品国产精品亚洲艾草网美妙| 伊人久久大香线蕉av不卡 | 日韩精品久久久肉伦网站| 97r久久精品国产99国产精| 2020久久精品亚洲热综合一本| 久久国产亚洲高清观看| 久久久久国产一区二区三区| 久久不射电影网| 亚洲精品无码久久久久去q | 久久久久九九精品影院| 蜜臀av性久久久久蜜臀aⅴ | 国产福利电影一区二区三区久久老子无码午夜伦不 | 国产精品久久久久a影院| 日韩欧美亚洲综合久久影院d3| 人妻久久久一区二区三区| 久久久精品人妻一区二区三区蜜桃| 久久中文字幕无码专区| 久久人人爽人人爽人人片AV东京热 | 三级片免费观看久久|