排序算法-插入排序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序算法-插入排序相关的知识,希望对你有一定的参考价值。

插入排序

(有大到小排序)

插入排序的思路就是

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         }

 

以上是关于排序算法-插入排序的主要内容,如果未能解决你的问题,请参考以下文章

排序算法之冒泡选择插入排序(Java)

排序算法之冒泡选择插入排序(Java)

《算法》笔记 3 - 选择排序插入排序希尔排序

三大基础排序算法(冒泡排序,选择排序,插入排序)

排序算法学习(直接插入排序,希尔排序,选择排序,堆排序,冒泡排序)

插入排序算法详解及代码实现