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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 风爽 中级黑马   /  2013-5-28 22:41  /  1294 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 风爽 于 2013-5-28 23:25 编辑

不知道提的对不对,只是自己的见解,如果错了,毕老师莫怪啊!!!
毕老师视频中的选择排序是不是有点问题啊?
选择排序的思想是:在要排序的一组数中,选出最小的一个数与第一个位置的数交换;然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止。
代码应该是:
  1. public class SelectSort
  2. {
  3.     public static void sort(int[] a)
  4.     {
  5.         
  6.         int position = 0;
  7.         for(int i = 0; i < a.length; i++)
  8.         {
  9.             position = i;
  10.             int temp = a[i];
  11.             for(int j = i + 1; j < a.length; j++)
  12.             {
  13.                     if(a[j] < temp)
  14.                     {
  15.                             temp = a[j];
  16.                             position = j;
  17.                     }
  18.             }
  19.             a[position] = a[i];
  20.             a[i] = temp;
  21.         }
  22.         for(int i = 0; i < a.length; i++)
  23.             System.out.print(a[i] + "\t");
  24.     }
  25.     public static void main(String[] args)
  26.     {
  27.             int a[]={54,2,5,75,21,34};
  28.             sort(a);
  29.     }
  30.    
  31. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

5 个回复

倒序浏览
从代码上看是差不多的
老师讲的是一开始拿第一个元素与其他元素比较,如果第一个元素大于,就交换位置,然后进行比较,直到找出最小值,最后存放的位置是第一个元素的位置。接着就是第二个元素。。。。
从楼主的代码上看,只是设置了一个指针和临时存储,最后是将最小值存放在第一个元素位置,而将原第一个元素放到了原最小元素的位置。
思想上都是拿一个元素与其他元素比,然后把最小的放在前面来,至于原来在前面的元素在哪并不重要,楼主觉得呢?

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
占楼,来看看,你把毕老师的程序一起拿出来做对比,我们来分析下。现在一时找不到他的程序。
回复 使用道具 举报
神之梦 发表于 2013-5-28 22:54
从代码上看是差不多的
老师讲的是一开始拿第一个元素与其他元素比较,如果第一个元素大于,就交换位置,然 ...

哦,仔细看了看,老师的代码是每次遇到更小的就交换一次。谢了
回复 使用道具 举报
class ArrayDemo
{
        public static void main(String[] args)
        {
                int[] arr =  {23,66,45,38,52};

                System.out.println("排序前");
                printArray(arr);

                //需求:对这个数组进行排序
                bubbleSort(arr);
               
                //需求:写一个对数组遍历的功能
                System.out.println("排序后");
                printArray(arr);
        }

        //遍历的功能
        public static void printArray(int[] arr)
        {
                for(int x=0; x<arr.length; x++)
                {
                        if(x==arr.length-1)
                        {
                                System.out.print(arr[x]);
                        }
                        else
                        {
                                System.out.print(arr[x]+",");
                        }
                }
                System.out.println();
        }

        //排序的功能
        public static void bubbleSort(int[] arr)
        {
                //外循环控制次数
                for(int x=0; x<arr.length-1; x++)
                {
                        //内循环注意了:
                        //-1为了防止索引越界
                        //-x是为了避免重复比较
                        for(int y=0; y<arr.length-1-x; y++)
                        {
                                if(arr[y]>arr[y+1])
                                {
                                        int temp = arr[y];
                                        arr[y] = arr[y+1];
                                        arr[y+1] = temp;
                                }
                        }
                }
        }
}
选择排序标准代码

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
廖志强 发表于 2013-5-28 23:29
class ArrayDemo
{
        public static void main(String[] args)

冒泡排序吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马