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

排序算法-插入排序

时间:2017-08-14 21:29:16      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:i++   ati   数组   pre   ...   原来   oid   bsp   超过   

插入排序

(有大到小排序)

插入排序的思路就是

1从集合第二个元素开始

2取出该元素

3从该元素开始,向前遍历,如果元素大于选中元素,则该元素向后移动一位

4直到找到一个小于或者等于当前元素(或者到达集合头部),将选出元素放在这个元素的下一位(或者集合头部)

重复1(注意选取下一个元素)

 

举例说明:

数组 4,5,3,8,9,1

①取出5保存到一个变量里,但是未修改原来集合,集合:4,5,3,8,9,1

②往前遍历到4,判断4是否大于5,否,判断元素位子是否改变,这里没有改变,(如果改变则将变量存到这个元素的下一位),(跳出内循环)回到①但是选取下一个元素(外循环) 集合:4,5,3,8,9,1

③选择3保存到变量,集合:4,5,3,8,9,1

④判断5是否大于3,是,将5后移 集合4,5,5,8,9,1 (这里后移采取的直接赋值到后面一位)

⑤判断4是否大于3,是,将4后移一位 集合4,4,5,8,9,1

⑥这里本来还要继续往前遍历,但是到达头部了(或者说⑤已经到达头部,这里在往前就超过集合区域了),所以就将变量放在头部了

⑦选择下一个元素8 重复

...

 

代码:

 1  public static void InsertionSort(int[] array)
 2         {
 3             //从第二位开始循环
 4             for (int i = 1; i < array.Length; i++)
 5             {
 6                 //选出一个一般变量
 7                 int c = array[i];
 8                 //从该变量位子开始往前遍历
 9                 for (int j = i - 1; j >= -1; j--)
10                 {
11                     //j==-1已经超过数组区域了
12                     if (j == -1)
13                     {
14                         array[0] = c;
15                         break;
16                     }
17                     //比当前元素大的后移一位
18                     else if (array[j] > c)
19                     {
20                         array[j + 1] = array[j];
21                     }
22                     else
23                     {
24                         if (j + 1 != i)
25                         {
26                             //j+1 != i说明元素位子发生改变
27                             array[j + 1] = c;
28                         }
29                         break;
30                     }
31                 }
32             }
33         }

 

排序算法-插入排序

标签:i++   ati   数组   pre   ...   原来   oid   bsp   超过   

原文地址:http://www.cnblogs.com/bigA/p/7359788.html

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