黑马程序员技术交流社区

标题: 有关数组排序的问题 [打印本页]

作者: 燕国庆    时间: 2012-10-8 16:51
标题: 有关数组排序的问题
本帖最后由 燕国庆 于 2012-10-23 17:42 编辑

class SortDemo
{
public static void main(String[] args)
{
  int[] arr={3,2,5,9,6,7,11,10,33,23};
  bianLi(arr);
  //maoSelect(arr);
  selectSort(arr);
  bianLi(arr);
}
public static void maoSelect(int[] arr)
{
  for(int x=0;x<arr.length-1;x++)            //在这里用到了以前毕老师说过的大圈套小圈的原理及嵌套循环,但是有点弄不清楚外循环河内循环的次数,
  {
   for(int y=0;y<arr.length-x-1;y++)     //在这里不知道有没有涉及到老师说的“尖朝上的问题”,若有涉及到该问题不知道怎样理解?
   {
    if(arr[y]>arr[y+1])
    {
     int temp=arr[y];
     arr[y]=arr[y+1];
     arr[y+1]=temp;
    }
   }
  }
}
public static void selectSort(int[] arr)
{
  for(int x=0;x<arr.length-1;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;
    }
   }
  }
}
public static void bianLi(int[] arr)
{
  System.out.print("[");
  for(int x=0;x<arr.length;x++)
  {
   if(x<arr.length-1)                                 //此条 语句若换成:  if(x!=length-1)与原来的语句有什么区别没?
{
    System.out.print(arr[x]+", ");
   }
   else
    System.out.println(arr[arr.length-1]+"]");
  }
}
}

这些地方总是感觉有点混沌,理解的不是那么清楚,希望有人能帮忙解释一下,谢谢!


作者: 王震阳老师    时间: 2012-10-8 18:34
我帮你看一下啊,
作者: 李兆宁    时间: 2012-10-8 19:08

class SortDemo
{
public static void main(String[] args)
{
  int[] arr={3,2,5,9,6,7,11,10,33,23};
  bianLi(arr);
  //maoSelect(arr);
  selectSort(arr);
  bianLi(arr);
}
public static void maoSelect(int[] arr)
{
  for(int x=0;x<arr.length-1;x++)            //在这里用到了以前毕老师说过的大圈套小圈的原理及嵌套循环,但是有点弄不清楚外循环河内循环的次数,
  {
   for(int y=0;y<arr.length-x-1;y++)     //在这里不知道有没有涉及到老师说的“尖朝上的问题”,若有涉及到该问题不知道怎样理解?
                //循环次数,就是外层没循环一次内层就循环一轮。如果内层次数不变,就是打印出矩形,总次数就是内外层只积。
                //在这里,外层没循环一次,内层循环次数就减少。
   {
    if(arr[y]>arr[y+1])
    {
     int temp=arr[y];
     arr[y]=arr[y+1];
     arr[y+1]=temp;
    }
   }
  }
}
public static void selectSort(int[] arr)
{
  for(int x=0;x<arr.length-1;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;
    }
   }
  }
}
public static void bianLi(int[] arr)
{
  System.out.print("[");
  for(int x=0;x<arr.length;x++)
  {
   if(x<arr.length-1)                                 //此条 语句若换成:  if(x!=length-1)
   //结果一样,x是自加的,知道加到了length-1就停了,也就是说,只要x小于他就一直运行,是一个意思
{
    System.out.print(arr[x]+", ");
   }
   else
    System.out.println(arr[arr.length-1]+"]");
  }
}
}
作者: 王震阳老师    时间: 2012-10-8 19:45
自己使用系统自带的画图工具花了半天花的图,分析了冒泡排序和选择排序的实质区别,
通过该图楼主应该可以很清晰的明白程序的内部原理了。

冒泡排序与选择排序的实质区别.JPG (85.68 KB, 下载次数: 26)

冒泡和选择排序的实质区别在哪里

冒泡和选择排序的实质区别在哪里





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