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