51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 5334|回复: 0
打印 上一主题 下一主题

java初学之排序——插入法排序

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2010-11-8 16:05:26 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
java初学之排序——插入法排序

Java私塾跟我学系列——JAVA篇  
基本思路:每拿到一个元素,都要将这个元素与所有它之前的元素遍历比较一遍,让符合排序顺序的元素挨个移动到当前范围内它最应该出现的位置。

举个例子来说,就用前面的数组,我们要对一个有 5 个元素的数组进行升序排列,假设第一个元素的值被假定为已排好序了,那么我们就将第 2 个元素与数组中的部分进行比较,如果第 2 个元素的值较小,则将它插入到第 1 个元素的前面,现在就有两个元素排好序了,我们再将没有排序的元素与排好序的元素列表进行比较,同样,如果小于第一个元素,就将它插入到第一个元素前面,但是,如果大于第一个元素的话,我们就将它再与第 2 个元素的值进行比较,小于的话就排在第 2 个元素前面,大于的话,就排在第 2 个元素的后面。以此类推,直到最后一个元素排好序。

示例如下:

  1. public class Test {
  2.    public static void main(String[] args) {
  3.    // 需要排序的数组,目前是按照升序排列的
  4.       int a[] = new int[5];
  5.       a[0] = 3;
  6.       a[1] = 4;
  7.       a[2] = 1;
  8.       a[3] = 5;
  9.       a[4] = 2;

  10.       // 插入法排序
  11.       int temp;
  12.       for (int i = 1; i < a.length; i++) {// i=1开始,因为第一个元素认为是已经排好序了的
  13.          for (int j = i; (j > 0) && (a[j] < a[j - 1]); j--) {
  14.             //交换
  15.             temp = a[j];
  16.             a[j] = a[j - 1];
  17.             a[j - 1] = temp;
  18.          }
  19.       }
  20.       // 检测一下排序的结果
  21.       for (int i : a) {
  22.          System.out.println("i=" + i);
  23.       }
  24.    }
  25. }
复制代码
运行结果:
i=1
i=2
i=3
i=4
i=5

如果你想要按照降序排列,很简单,只需要把: a[j] < a[j - 1]这句话修改成:a[j] > a[j - 1]就可以了。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-22 05:31 , Processed in 0.075360 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表