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

    程序的運(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ù)
         無論文件初始狀態(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狂 閱讀(4071) 評(píng)論(8)  編輯  收藏 所屬分類: Java算法

    評(píng)論

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

    開源英漢機(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

    你做法是一種很簡單的做法!
    你要知道是第一次是從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)前無序區(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)的直接選擇排序算法[未登錄] 2007-12-07 22:36 天才籃球手

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

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

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

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

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

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

    導(dǎo)航

    統(tǒng)計(jì)

    常用鏈接

    留言簿(11)

    隨筆分類(48)

    文章分類(29)

    常去逛逛

    搜索

    積分與排名

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 精品国产污污免费网站入口在线| 免费一级一片一毛片| 一级一级一片免费高清| 亚洲av无码片区一区二区三区| 国产亚洲精品激情都市| 在线观看亚洲免费| 日韩欧美一区二区三区免费观看| 久久国产精品免费看| 一区二区三区精品高清视频免费在线播放| 亚洲精品福利你懂| 亚洲黑人嫩小videos| 亚洲av中文无码乱人伦在线r▽| 亚洲精品偷拍视频免费观看| 国产成人精品免费视频软件| 成人浮力影院免费看| 一级成人a毛片免费播放| 99免费在线视频| 黄色网页在线免费观看| 免费国产在线精品一区| 羞羞视频在线免费观看| 色窝窝亚洲av网| 国产91成人精品亚洲精品| 亚洲欧美aⅴ在线资源| 在线a亚洲老鸭窝天堂av高清| 亚洲码在线中文在线观看| 精品日韩亚洲AV无码| 亚洲成a人片在线观看中文动漫| 久久精品国产亚洲麻豆| 亚洲国产成人一区二区精品区| 亚洲最大激情中文字幕| 亚洲熟女少妇一区二区| 亚洲乱码精品久久久久..| 亚洲中文字幕不卡无码| 亚洲色中文字幕无码AV| 亚洲国产精品无码久久一线| 久久夜色精品国产嚕嚕亚洲av| 亚洲日韩精品无码一区二区三区 | AV在线亚洲男人的天堂| 亚洲国产精品尤物YW在线观看| 亚洲AV成人精品日韩一区18p| 免费一看一级毛片|