A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵方明 中级黑马   /  2012-5-19 20:44  /  1715 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class xuanzepaixu
{
        /*
        需求:将一个数组按从小到大排列
        思路:1,返回值类型是void
              2,有未知参数
        */
   public static void selectsort(int [] arr)
        {
           for (int x=0;x<arr.length ;x++ )
           {
                   for (int y=0;y<arr.length ;y++ )
                   {
                           if (arr[x]>arr[y])
                           {
                                   int temp=arr[x];
                                   arr[x]=arr[y];
                                   arr[y]=temp;
                                  
                           }
                   }
           }
   }
   public static void main(String [] args)
        {
           int [] arr={2,5,9,3,6,7};
          
           bianli(arr);
           selectsort(arr);
           bianli(arr);
   }
   /*
   需求:遍历数组中的元素,并打印
   思路:1,返回值类型是void
         2,有未知参数
   */
   //遍历
   public static void bianli(int [] arr)
        {
           System.out.print("[");
           for (int x=0;x<arr.length ;x++ )
           {
                  
                   if (x!=arr.length-1)
                   System.out.print(arr[x]+",");
                   else
                   System.out.println(arr[x]+"]");
           }
   }
}
应该是从小到大的,但是结果是
[2,5,9,3,6,7]
[8,7,6,5,3,2]

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

5 个回复

倒序浏览
for (int y=0;y<arr.length ;y++ )
应该是y=x+1;y<arr.lenth;y++
如果是y=0岂不是又换回去了.
回复 使用道具 举报

你使用的是选择排序,原理图解。

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
你所使用的是选择排序,选择排序是每次选择一个最小的数放前面.
外循环是循环length-1次
第一次循环,从第二个数开始,逐个和第一个数比较,如果比第一个数小,就交换,最后会将最小的数换到第一个
第二次循环,从第三个数开始,逐个和第二个数比较,如果比第二个数小,就交换,最后会将最小的数换到第二个
.............依次下来...
你的外循环和内循环都写错了
应该是 for(int x = 0; x < arr.length-1;x++){
        for(int y = x + 1; y < arr.length;y++){
         if(arr[y] < arr[x]){
           int temp = arr[x];
           arr[x] = arr[y];
           arr[y] = temp;
        
}
}
}

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
package com.itcast.test;

class xuanzepaixu
{
         /*
         需求:将一个数组按从小到大排列
         思路:1,返回值类型是void
               2,有未知参数
         */
    public static void selectsort(int [] arr)
         {
            for (int x=0;x<arr.length ;x++ )
            {
                    for (int y=0;y<arr.length ;y++ )
                    {
                            if (arr[x]<arr[y])
                            {
                                    int temp=arr[x];
                                    arr[x]=arr[y];
                                    arr[y]=temp;
                                   
                            }
                    }
            }
    }
    public static void main(String [] args)
         {
            int [] arr={2,5,9,3,6,7};
            
           bianli(arr);
            selectsort(arr);
            bianli(arr);
    }
    /*
    需求:遍历数组中的元素,并打印
    思路:1,返回值类型是void
          2,有未知参数
    */
    //遍历
    public static void bianli(int [] arr)
         {
            System.out.print("[");
            for (int x=0;x<arr.length ;x++ )
            {
                    
                   if (x!=arr.length-1)
                    System.out.print(arr[x]+",");
                    else
                    System.out.println(arr[x]+"]");
            }
    }
}
改成这样就对了,你试试
你只需要if (arr[x]>arr[y])改个方向就对了。
回复 使用道具 举报
       选择排序的思想是:从无序序列中选出一个最小的元素插入到有序序列中
它的算法为
           for (int x=0;x<arr.length ;x++ )
           {
                   for (int y=x+1;y<arr.length ;y++ )
                   {
                           if (arr[x]>arr[y])
                           {
                                   int temp=arr[x];
                                   arr[x]=arr[y];
                                   arr[y]=temp;                                 
                           }
                   }
           }
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马