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

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

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

    一種用Java實現的直接選擇排序算法

           大家都學習過數據結構,都知道各種各樣的排序方法,比如冒泡排序,選擇排序,堆排序,歸并排序等等,我學習的教材是C語言版的,今天處于好奇,寫了一個用Java語言實現的直接選擇排序的程序,與大家分享一下。
          直接選擇排序的思想是
    n個記錄的文件的直接選擇排序可經過n-1趟直接選擇排序得到有序結果:
     ①初始狀態:無序區為R[1..n],有序區為空。
     ②第1趟排序
         在無序區R[1..n]中選出關鍵字最小的記錄R[k],將它與無序區的第1個記錄R[1]交換,使R[1..1]和R[2..n]分別變為記錄個數增加1個的新有序區和記錄個數減少1個的新無序區。
      ……
     ③第i趟排序
      第i趟排序開始時,當前有序區和無序區分別為R[1..i-1]和R[i..n](1≤i≤n-1)。該趟排序從當前無序區中選出關鍵字最小的記錄R[k],將它與無序區的第1個記錄R[i]交換,使R[1..i]和R[i+1..n]分別變為記錄個數增加1個的新有序區和記錄個數減少1個的新無序區。
         這樣,n個記錄的文件的直接選擇排序可經過n-1趟直接選擇排序得到有序結果。

    用Java實現的代碼如下:

    /*
     *@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]);// 輸入數組長度
            double R[] = new double[n];
            
    if (n == 0)
                System.out.println(
    "數組為空");
            
    else
            
    {
                System.out.println(
    "排序前:");
                
    for (int i = 0; i < n; i++)
                    R[i] 
    = Double.parseDouble(args[i + 1]);// 輸入數組元素。
                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]);
                }

            }

        }

    }

    程序運行過程:

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

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

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

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

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

    評論

    # re: 一種用Java實現的直接選擇排序算法 2007-04-18 08:42 開源英漢機器翻譯

    開源英漢機器翻譯C#.NET項目 www.liebiao.net
    我們邀請你 技術交流  回復  更多評論   

    # re: 一種用Java實現的直接選擇排序算法 2007-11-14 20:42 陳力

    錯了!
      回復  更多評論   

    # re: 一種用Java實現的直接選擇排序算法 2007-11-14 20:56 qq564878494

    你做法是一種很簡單的做法!
    你要知道是第一次是從r[1]-r[n]中選擇一個最小值排序,第二次是從r[2]-r[n]中選擇一個最小的與r[2]排序  回復  更多評論   

    # re: 一種用Java實現的直接選擇排序算法 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++) //在當前無序區R[i..n]中選key最小的記錄R[k]
    if(R[j].key<R[k].key)
    k=j; //k記下目前找到的最小關鍵字所在的位置
    if(k!=i){ //交換R[i]和R[k]
    R[0]=R[i];R[i]=R[k];R[k]=R[0]; //R[0]作暫存單元
    } //endif
    } //endfor
    } //SeleetSort
      回復  更多評論   

    # re: 一種用Java實現的直接選擇排序算法 2007-11-14 21:02 qq564878494

    你好想想吧  回復  更多評論   

    # re: 一種用Java實現的直接選擇排序算法[未登錄] 2007-12-07 22:36 天才籃球手

    太簡單了吧,研究生也不過如此啊!  回復  更多評論   

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

    大一學的知識,你真有才,到研究生才會啊!  回復  更多評論   

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

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

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

    導航

    統計

    常用鏈接

    留言簿(11)

    隨筆分類(48)

    文章分類(29)

    常去逛逛

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲人成片在线观看| 亚洲欧美日本韩国| 最新猫咪www免费人成| 国产精品成人亚洲| 亚洲国产精品嫩草影院在线观看 | 亚洲AV无码欧洲AV无码网站| 女同免费毛片在线播放| 亚洲一区二区三区免费视频| 免费一级做a爰片性色毛片| 一级毛片视频免费| 亚洲精品视频在线观看视频| 国产精品无码一区二区三区免费| 七色永久性tv网站免费看| 亚洲欧美成人一区二区三区| 久久亚洲伊人中字综合精品| 日本无卡码免费一区二区三区| 久9久9精品免费观看| 精品在线视频免费| 亚洲成a人片在线观看中文!!! | 57PAO成人国产永久免费视频| 猫咪www免费人成网站| 亚洲精品高清国产麻豆专区| 亚洲精品成人a在线观看| 久久这里只有精品国产免费10| 久久九九免费高清视频| 亚洲精品无码人妻无码 | 国产精品极品美女自在线观看免费| 亚洲国产精品白丝在线观看| 久久精品国产亚洲7777| 午夜成年女人毛片免费观看| 久草免费福利视频| kk4kk免费视频毛片| 色天使色婷婷在线影院亚洲| 亚洲精品456在线播放| 国产亚洲综合一区柠檬导航| www.91亚洲| 国产hs免费高清在线观看| 野花高清在线观看免费完整版中文 | 黄色短视频免费看| 免费无码午夜福利片69| 亚洲狠狠色丁香婷婷综合|