<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    一種用Java實(shí)現(xiàn)的直接選擇排序算法

           大家都學(xué)習(xí)過(guò)數(shù)據(jù)結(jié)構(gòu),都知道各種各樣的排序方法,比如冒泡排序,選擇排序,堆排序,歸并排序等等,我學(xué)習(xí)的教材是C語(yǔ)言版的,今天處于好奇,寫(xiě)了一個(gè)用Java語(yǔ)言實(shí)現(xiàn)的直接選擇排序的程序,與大家分享一下。
          直接選擇排序的思想是
    n個(gè)記錄的文件的直接選擇排序可經(jīng)過(guò)n-1趟直接選擇排序得到有序結(jié)果:
     ①初始狀態(tài):無(wú)序區(qū)為R[1..n],有序區(qū)為空。
     ②第1趟排序
         在無(wú)序區(qū)R[1..n]中選出關(guān)鍵字最小的記錄R[k],將它與無(wú)序區(qū)的第1個(gè)記錄R[1]交換,使R[1..1]和R[2..n]分別變?yōu)橛涗泜€(gè)數(shù)增加1個(gè)的新有序區(qū)和記錄個(gè)數(shù)減少1個(gè)的新無(wú)序區(qū)。
      ……
     ③第i趟排序
      第i趟排序開(kāi)始時(shí),當(dāng)前有序區(qū)和無(wú)序區(qū)分別為R[1..i-1]和R[i..n](1≤i≤n-1)。該趟排序從當(dāng)前無(wú)序區(qū)中選出關(guān)鍵字最小的記錄R[k],將它與無(wú)序區(qū)的第1個(gè)記錄R[i]交換,使R[1..i]和R[i+1..n]分別變?yōu)橛涗泜€(gè)數(shù)增加1個(gè)的新有序區(qū)和記錄個(gè)數(shù)減少1個(gè)的新無(wú)序區(qū)。
         這樣,n個(gè)記錄的文件的直接選擇排序可經(jīng)過(guò)n-1趟直接選擇排序得到有序結(jié)果。

    用Java實(shí)現(xiàn)的代碼如下:

    /*
     *@author 我為J狂 建立日期 2007-4-16
     *
     
    */

    package net.blogjava.lzqdiy;

    public class MySort
    {

        
    /**
         * 
    @param args
         
    */

        
    public static void main(String[] args)
        
    {
            
    // TODO Auto-generated method stub
            int n = Integer.parseInt(args[0]);// 輸入數(shù)組長(zhǎng)度
            double R[] = new double[n];
            
    if (n == 0)
                System.out.println(
    "數(shù)組為空");
            
    else
            
    {
                System.out.println(
    "排序前:");
                
    for (int i = 0; i < n; i++)
                    R[i] 
    = Double.parseDouble(args[i + 1]);// 輸入數(shù)組元素。
                for (int i = 0; i < n; i++)
                
    {
                    
    if (i > 0)
                        System.out.print(
    ",");
                    System.out.print(R[i]);
                }

                
    double temp = 0;
                
    for (int i = 0; i < n - 1; i++)
                
    {
                    
    for (int j = i + 1; j < n; j++)
                    
    {
                        
    if (R[j] < R[i])
                        
    {
                            temp 
    = R[i];
                            R[i] 
    = R[j];
                            R[j] 
    = temp;
                        }

                    }

                }

                System.out.println();
                System.out.println(
    "排序后:");
                
    for (int i = 0; i < n; i++)
                
    {
                    
    if (i > 0)
                        System.out.print(
    ",");
                    System.out.print(R[i]);
                }

            }

        }

    }

    程序運(yùn)行過(guò)程:

    程序的運(yùn)行結(jié)果是:
    排序前:
    3.6,7.4,2.1,3.3,2.0
    排序后:
    2.0,2.1,3.3,3.6,7.4
    算法分析
    (1)關(guān)鍵字比較次數(shù)
         無(wú)論文件初始狀態(tài)如何,在第i趟排序中選出最小關(guān)鍵字的記錄,需做n-i次比較,因此,總的比較次數(shù)為:
         n(n-1)/2=0(n2)

    (2)記錄的移動(dòng)次數(shù)
         當(dāng)初始文件為正序時(shí),移動(dòng)次數(shù)為0
         文件初態(tài)為反序時(shí),每趟排序均要執(zhí)行交換操作,總的移動(dòng)次數(shù)取最大值3(n-1)。
         直接選擇排序的平均時(shí)間復(fù)雜度為O(n2)。

    (3)直接選擇排序是一個(gè)就地排序

    (4)穩(wěn)定性分析
         直接選擇排序是不穩(wěn)定的
       【例】反例[2,2,1]

    posted on 2007-04-16 11:51 我為J狂 閱讀(4080) 評(píng)論(8)  編輯  收藏 所屬分類: Java算法

    評(píng)論

    # re: 一種用Java實(shí)現(xiàn)的直接選擇排序算法 2007-04-18 08:42 開(kāi)源英漢機(jī)器翻譯

    開(kāi)源英漢機(jī)器翻譯C#.NET項(xiàng)目 www.liebiao.net
    我們邀請(qǐng)你 技術(shù)交流  回復(fù)  更多評(píng)論   

    # re: 一種用Java實(shí)現(xiàn)的直接選擇排序算法 2007-11-14 20:42 陳力

    錯(cuò)了!
      回復(fù)  更多評(píng)論   

    # re: 一種用Java實(shí)現(xiàn)的直接選擇排序算法 2007-11-14 20:56 qq564878494

    你做法是一種很簡(jiǎn)單的做法!
    你要知道是第一次是從r[1]-r[n]中選擇一個(gè)最小值排序,第二次是從r[2]-r[n]中選擇一個(gè)最小的與r[2]排序  回復(fù)  更多評(píng)論   

    # re: 一種用Java實(shí)現(xiàn)的直接選擇排序算法 2007-11-14 21:02 qq564878494

    void SelectSort(SeqList R)
     {
    int i,j,k;
    for(i=1;i<n;i++){//做第i趟排序(1≤i≤n-1)
    k=i;
    for(j=i+1;j<=n;j++) //在當(dāng)前無(wú)序區(qū)R[i..n]中選key最小的記錄R[k]
    if(R[j].key<R[k].key)
    k=j; //k記下目前找到的最小關(guān)鍵字所在的位置
    if(k!=i){ //交換R[i]和R[k]
    R[0]=R[i];R[i]=R[k];R[k]=R[0]; //R[0]作暫存單元
    } //endif
    } //endfor
    } //SeleetSort
      回復(fù)  更多評(píng)論   

    # re: 一種用Java實(shí)現(xiàn)的直接選擇排序算法 2007-11-14 21:02 qq564878494

    你好想想吧  回復(fù)  更多評(píng)論   

    # re: 一種用Java實(shí)現(xiàn)的直接選擇排序算法[未登錄](méi) 2007-12-07 22:36 天才籃球手

    太簡(jiǎn)單了吧,研究生也不過(guò)如此啊!  回復(fù)  更多評(píng)論   

    # re: 一種用Java實(shí)現(xiàn)的直接選擇排序算法[未登錄](méi) 2007-12-07 22:37 天才籃球手

    大一學(xué)的知識(shí),你真有才,到研究生才會(huì)啊!  回復(fù)  更多評(píng)論   

    # re: 一種用Java實(shí)現(xiàn)的直接選擇排序算法 2007-12-08 09:43 我為J狂

    @天才籃球手
    我大一的時(shí)候,還沒(méi)接觸java,只是接觸了一些C語(yǔ)言,哥們你的口氣可夠大的,這樣不太好吧!  回復(fù)  更多評(píng)論   

    <2007年4月>
    25262728293031
    1234567
    891011121314
    15161718192021
    22232425262728
    293012345

    導(dǎo)航

    統(tǒng)計(jì)

    常用鏈接

    留言簿(11)

    隨筆分類(48)

    文章分類(29)

    常去逛逛

    搜索

    積分與排名

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 国产AV无码专区亚洲AV毛网站 | 亚洲av无码成人影院一区| 99精品全国免费观看视频..| 亚洲av永久无码精品三区在线4| 中文字幕不卡亚洲| 7x7x7x免费在线观看| 亚洲国产日韩综合久久精品| 国产精品亚洲一区二区三区在线| 日本媚薬痉挛在线观看免费| 成人福利在线观看免费视频| 亚洲AV无码国产精品麻豆天美| 日韩亚洲国产二区| 日美韩电影免费看| 国产免费久久精品99re丫y| 阿v免费在线观看| 久久久久亚洲AV无码专区首JN | 久久久久免费视频| 青青青视频免费观看| 久久久久久国产精品免费无码| 国产精品美女久久久免费| 国产在亚洲线视频观看| 亚洲午夜无码久久久久小说| 亚洲av无码专区在线| 亚洲婷婷综合色高清在线| 亚洲精品美女久久久久| 亚洲人成电影福利在线播放| 五月天网站亚洲小说| 日本不卡免费新一二三区| 99久久免费精品国产72精品九九 | 亚洲精品偷拍无码不卡av| 久久亚洲精品AB无码播放| 国产av无码专区亚洲av桃花庵| 国产A在亚洲线播放| 亚洲国产精品成人久久| 亚洲AV午夜成人片| 亚洲欧洲日产国产综合网| 青青草原精品国产亚洲av| 亚洲国产精品无码久久青草 | 成人无码区免费A∨直播| 中文字幕免费在线看| 国偷自产一区二区免费视频|