之前写了一个冒泡排序算法,这里再加一个插入排序算法,链接里讲得也比较详细,不过为了熟练,还是自己亲自敲一遍,再次贴出来,分享一下
1 | public void InsertSort(int[] array) |
同样在Program
的Main
函数里New一个(一)中写的那个CSharpArray
类,调用其中的方法测试:
1 | using System; |
输出结果:
排序前:
0 4 0 1 1 4 5 7
排序后:
0 0 1 1 4 4 5 7
为了显示for
循环中的每次执行结果,在InsertSort
方法里加一句输出:
1 | public void InsertSort(int[] array) |
再次编译运行即得以下结果:
排序前:
4 6 0 5 0 3 1 3
排序后:
4 6 0 5 0 3 1 3
0 4 6 5 0 3 1 3
0 4 5 6 0 3 1 3
0 0 4 5 6 3 1 3
0 0 3 4 5 6 1 3
0 0 1 3 4 5 6 3
0 0 1 3 3 4 5 6
0 0 1 3 3 4 5 6
由此可见,插入排序算法的基本思想是从左到右找出最小的一个往左移插入到合适的位置,遍历完整个数组之后,真个数组就变为有序啦!
同样,为了将以上的升序排序算法改为降序,也只需将while
括号里的大于号改为小于号即可。
这里,既然将其封装在一个类里,自然要提高其通用性,因此,我可以再给改排序算法添加一个参数,用来标记是升序排序还是降序排序。如:用“0”表示升序,用“1”表示降序,在不降低代码运行效率时以牺牲代码简洁性来修改一下代码:
1 | /// <summary> |
再修改Main
函数里代码:
1 | using System; |
编译运行结果如下所示:
排序前:
5 7 1 2 7 2 2 4
升序排序后:
5 7 1 2 7 2 2 4
1 5 7 2 7 2 2 4
1 2 5 7 7 2 2 4
1 2 5 7 7 2 2 4
1 2 2 5 7 7 2 4
1 2 2 2 5 7 7 4
1 2 2 2 4 5 7 7
1 2 2 2 4 5 7 7
降序排序后:
2 1 2 2 4 5 7 7
2 2 1 2 4 5 7 7
2 2 2 1 4 5 7 7
4 2 2 2 1 5 7 7
5 4 2 2 2 1 7 7
7 5 4 2 2 2 1 7
7 7 5 4 2 2 2 1
7 7 5 4 2 2 2 1
最后,再次贴一下CSharpArray
类的代码:
1 | using System; |
OK,插入排序算法的基本演示就到此结束!
注:由于数组时代码里生成的随机数组,因此每次运行的结果基本不一样,可能与以上演示结果不同。