<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狂 閱讀(4072) 評論(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年12月>
    2526272829301
    2345678
    9101112131415
    16171819202122
    23242526272829
    303112345

    導航

    統計

    常用鏈接

    留言簿(11)

    隨筆分類(48)

    文章分類(29)

    常去逛逛

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲欧美不卡高清在线| 成全高清在线观看免费| 久久精品国产精品亚洲艾草网美妙| 一级毛片免费播放男男| 亚洲国产成人久久精品动漫| 18pao国产成视频永久免费| 亚洲AV日韩综合一区| 国产精品亚洲一区二区三区在线| xx视频在线永久免费观看| 国产亚洲人成在线影院| 亚洲国产精品一区二区久久| 日本高清免费aaaaa大片视频| a级毛片免费全部播放| 四虎必出精品亚洲高清| 国产亚洲人成无码网在线观看| 日韩免费一区二区三区在线播放| 日韩精品无码永久免费网站| 亚洲人成网站在线观看播放青青| 亚洲国产精品成人网址天堂| 成人免费视频69| 国偷自产一区二区免费视频| 国产成人亚洲精品蜜芽影院| 亚洲欧洲日产国码二区首页| 亚洲熟妇无码AV在线播放| 免费观看男人免费桶女人视频| 无码精品一区二区三区免费视频 | APP在线免费观看视频| 99亚洲乱人伦aⅴ精品| 亚洲理论在线观看| 亚洲中文字幕久久精品无码APP| 女人18毛片特级一级免费视频| 伊人久久免费视频| free哆拍拍免费永久视频| 亚洲精品色播一区二区| 亚洲高清无在码在线无弹窗| 亚洲精品无码乱码成人| 九月婷婷亚洲综合在线| 日韩免费视频一区| 国语成本人片免费av无码| 120秒男女动态视频免费| 国产成人久久AV免费|