<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)

    常去逛逛

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 无码囯产精品一区二区免费 | 午夜亚洲av永久无码精品| 亚洲伊人久久大香线蕉在观| 日韩免费电影网站| 亚洲国产精品线在线观看| 国产精品美女免费视频观看| 中文字幕亚洲无线码| 中文字幕版免费电影网站| 激情综合色五月丁香六月亚洲| 免费精品视频在线| 亚洲无码视频在线| 九九久久国产精品免费热6 | 久久91亚洲人成电影网站| 成人片黄网站色大片免费观看APP| 在线观看亚洲精品国产| 外国成人网在线观看免费视频| 亚洲AV日韩AV永久无码免下载| 久久成人免费大片| 亚洲天堂福利视频| 在线免费观看视频你懂的| 国产午夜亚洲精品不卡| 亚洲中文字幕久久精品无码喷水| 中国一级特黄高清免费的大片中国一级黄色片| 国产亚洲高清不卡在线观看| 日韩精品无码一区二区三区免费| 亚洲区精品久久一区二区三区| 成人黄软件网18免费下载成人黄18免费视频| 精品国产亚洲一区二区三区在线观看| 国产人成免费视频| 三级毛片在线免费观看| 18gay台湾男同亚洲男同| 午夜男人一级毛片免费| 四虎一区二区成人免费影院网址| 亚洲国产成人片在线观看无码| 亚洲视频在线观看免费| 亚洲夂夂婷婷色拍WW47| 亚洲高清无码专区视频| 免费女人高潮流视频在线观看| 亚洲精品国产高清在线观看| 国产亚洲av片在线观看播放| 国产va精品免费观看|