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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© qqhao01 高级黑马   /  2013-9-19 16:49  /  1120 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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>
复制代码

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

2 个回复

倒序浏览
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;

   

   }

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

回复 使用道具 举报
1、y>0 是因为如果y--;  到0了就不满足条件
2、(arr[y]<arr[y-1])  只要,数组中后面这个数小于前面的数就进行互换

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

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