黑马程序员技术交流社区

标题: 选择排序 [打印本页]

作者: 风爽    时间: 2013-5-28 22:41
标题: 选择排序
本帖最后由 风爽 于 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. }
复制代码

作者: 神之梦    时间: 2013-5-28 22:54
从代码上看是差不多的
老师讲的是一开始拿第一个元素与其他元素比较,如果第一个元素大于,就交换位置,然后进行比较,直到找出最小值,最后存放的位置是第一个元素的位置。接着就是第二个元素。。。。
从楼主的代码上看,只是设置了一个指针和临时存储,最后是将最小值存放在第一个元素位置,而将原第一个元素放到了原最小元素的位置。
思想上都是拿一个元素与其他元素比,然后把最小的放在前面来,至于原来在前面的元素在哪并不重要,楼主觉得呢?
作者: 小羽天空    时间: 2013-5-28 22:59
占楼,来看看,你把毕老师的程序一起拿出来做对比,我们来分析下。现在一时找不到他的程序。
作者: 风爽    时间: 2013-5-28 23:02
神之梦 发表于 2013-5-28 22:54
从代码上看是差不多的
老师讲的是一开始拿第一个元素与其他元素比较,如果第一个元素大于,就交换位置,然 ...

哦,仔细看了看,老师的代码是每次遇到更小的就交换一次。谢了
作者: 廖志强    时间: 2013-5-28 23:29
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;
                                }
                        }
                }
        }
}
选择排序标准代码
作者: 风爽    时间: 2013-5-28 23:32
廖志强 发表于 2013-5-28 23:29
class ArrayDemo
{
        public static void main(String[] args)

冒泡排序吧




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2