码迷,mamicode.com
首页 > 编程语言 > 详细

直接插入排序(内部排序)

时间:2015-03-01 23:45:26      阅读:211      评论:0      收藏:0      [点我收藏+]

标签:

技术分享

技术分享
 1 package com.trfizeng.insertionsort;
 2 
 3 /**
 4  * 
 5  * @author trfizeng 内部排序 插入排序 --- 直接插入排序(Straight Insertion Sort)
 6  * 
 7  */
 8 public class StraightInsertionSort {
 9     public static int[] straightInsertionSort(int[] array) {
10         // 对传来的待排序数组进行合法验证
11         if (array != null && array.length != 0) {
12             // 用来控制已排序好记录下标
13             int j = 0;
14             // i = 0 把第一个当作是有序记录,之后的全部看着无序记录
15             for (int i = 1; i < array.length; i++) {
16                 // 后一个跟有序记录最后一个比较
17                 if (array[i] < array[i - 1]) {
18                     // 把比有序记录最后一个小的数复制一份作为要插到有序记录的数,因为在赋值的过程会丢失
19                     int temp = array[i];
20                     // 覆盖掉这个作为要插的记录使之当前有序记录数 + 1
21                     array[i] = array[i - 1];
22                     // 因为在上面已经比较过了和覆盖过,所有要去除这2个数
23                     j = i - 2;
24                     // 拿着这个要插的数跟有序记录一一对比,只要比当前有序记录最后一个小的就把这个数后挪一位,为了保证插入排序是稳定的,不能是<=
25                     while (j >= 0 && temp < array[j]) {
26                         // 使记录后移
27                         array[j + 1] = array[j];
28                         // 比较过就除去,有序记录数 - 1
29                         j--;
30                     }
31                     // 最后把要插的数插到该插的位置
32                     array[j + 1] = temp;
33                 }
34             }
35         }
36         return array;
37     }
38 }
View Code
技术分享
 1 package com.trfizeng.test;
 2 
 3 import com.trfizeng.insertionsort.StraightInsertionSort;
 4 
 5 /**
 6  * 测试类
 7  * 
 8  * @author trfizeng
 9  * 
10  */
11 public class SortTest {
12     // 待排序数组
13     static int[] array = new int[] { 6, 1, 4, 10, 11, 8, 7, 1 };
14 
15     /**
16      * 直接插入排序法测试
17      */
18     public static void straightInsertionSortTest() {
19         System.out.print("待排序数组:[ ");
20         for (int i = 0; i < array.length; i++) {
21             System.out.print(array[i] + " ");
22         }
23         System.out.print("]   ");
24 
25         array = StraightInsertionSort.straightInsertionSort(array);
26         System.out.print("排好序的数组:[ ");
27         for (int i = 0; i < array.length; i++) {
28             System.out.print(array[i] + " ");
29         }
30         System.out.print("]");
31     }
32 
33     public static void main(String[] args) {
34         SortTest.straightInsertionSortTest();
35 
36     }
37 }
View Code

 

直接插入排序(内部排序)

标签:

原文地址:http://www.cnblogs.com/trfizeng/p/4307725.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!