• <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交換,所以是不穩定的。  回復  更多評論   

            国产精品久久久久天天影视| 久久99精品免费一区二区| 久久亚洲中文字幕精品一区| 婷婷久久综合九色综合绿巨人| 一本久久精品一区二区| 久久精品免费观看| 亚洲AV无码成人网站久久精品大| 精品国产一区二区三区久久久狼| 伊人久久精品线影院| 亚洲精品无码久久久久| 精品久久久久久久| 欧美久久一区二区三区| 亚洲AV无一区二区三区久久| 精品国产91久久久久久久| 亚洲第一永久AV网站久久精品男人的天堂AV | 国产精品久久久久aaaa| 久久精品综合一区二区三区| 99久久婷婷免费国产综合精品| 国产99久久久国产精免费| 精品久久无码中文字幕| 久久精品成人欧美大片| 亚洲国产精品久久电影欧美 | 久久国产免费直播| 九九精品99久久久香蕉| 狠狠色婷婷久久综合频道日韩| 中文字幕亚洲综合久久| 性欧美大战久久久久久久久 | 久久婷婷综合中文字幕| 国产精品久久永久免费| 久久精品国产99国产精品导航| 美女久久久久久| 久久亚洲国产欧洲精品一| 性欧美大战久久久久久久久| 午夜精品久久影院蜜桃| 美女久久久久久| 久久久久亚洲精品天堂久久久久久| 久久夜色精品国产噜噜噜亚洲AV| 久久婷婷五月综合97色| 综合久久一区二区三区 | 久久亚洲高清综合| 久久久黄片|