黑马程序员技术交流社区

标题: 插入排序问题 [打印本页]

作者: qqhao01    时间: 2013-9-19 16:49
标题: 插入排序问题
本帖最后由 qqhao01 于 2013-9-19 18:43 编辑

如代码:
  1. //插入排序
  2. public static void insertionSort(int[] arr)
  3. {
  4.   for(int x=1;x<arr.length;x++)
  5.   {
  6.    for(int y=x;(y>0)&&(arr[y]<arr[y-1]);y--)//这里有些没明白,主要是(y>0)&&(arr[y]<arr[y-1])
  7.    {
  8.     int temp=arr[y];
  9.     arr[y]=arr[y-1];
  10.     arr[y-1]=temp;
  11.    
  12.    }
  13.   }
  14. }

  15. public static void printArray(int[] arr)
  16. {
  17.   System.out.print("[");
  18.   for(int x=0;x<arr.length;x++)
  19.   {
  20.    if(x!=arr.length-1)
  21.    {
  22.     System.out.print(arr[x]+",");
  23.    }else{
  24.     System.out.println(arr[x]+"]");
  25.    }
  26.   }
  27. }

  28. public static void main(String[] args)
  29. {
  30.   int[] arr={1, 3, 2, 5, 12, 123, 23, 2, 541, 1, 76, 76};
  31.   //排序前
  32.   printArray(arr);
  33.   //进行排序
  34.   insertionSort(arr);
  35.   //排序后
  36.   printArray(arr);
  37. }
  38. <p> </p>
复制代码

作者: 路边小色狼    时间: 2013-9-19 17:43
for(int y=x;(y>0)&&(arr[y]<arr[y-1]);y--)//   arr[y]<arr[y-1]表示数组中前者比后者大时,,而y>0是为了让y-1>=0,因为角标最小为0.  两个条件都满足才执行以下动作
{
    int temp=arr[y];

    arr[y]=arr[y-1];

    arr[y-1]=temp;

   

   }


作者: (0.0)’    时间: 2013-9-19 17:54
1、y>0 是因为如果y--;  到0了就不满足条件
2、(arr[y]<arr[y-1])  只要,数组中后面这个数小于前面的数就进行互换




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