插入排序
1.想象桌子上有一堆扑克牌,左手中只有一张,数值是2,然后从桌子上拿起一张,数值是5,将这张扑克牌的和左手上的扑克牌进行比较,把较小的哪一个放到左边,于是左手上的扑克牌变成两张,排列从左到右分别是:2,5。
2.然后再从桌子上拿起一张牌3,此时左手上已经有两张牌并且已经排好顺序,左边的小右边的大。然后我们把刚刚拿起的第三张牌和左手上的扑克牌进行比较,从左开始,那么就是先和2比较,3>2,于是再和下一个比较,3<5,那么就把5往后移动,在2和5之间留出一个空格来放置3,停止比较,去桌子上抓下一张牌。
3.重复上一步,直到桌子上再也没有扑克牌。
假设有数组a[10]={8,4,6,3,2,1,8,5,11,25},我们把a[0]当成左手上的第一张牌,a[1]-a[9]当成是桌子上的那一堆牌:
然后开始执行插入排序,将4与8相比较,4<8 然后将8向右移动:
再把4放置到空位上:
这样就做好了第一轮排序,再执行下一轮:
6先与4比较,6>4,不满足条件再和下一个比较,8>6,满足条件,于是将8向右移动,这样就又出现一个空位:
把6填进去:
以此类推,直到所有元素都排序完成。
代码:
class Program { static void Main(string[] args) { int[] a = new int[] { 8, 4, 6, 3, 2, 1, 8, 5, 11, 25 }; Console.WriteLine("未排序之前的顺序:"); foreach (int s in a) { Console.WriteLine(" {0}",s); } int j, k; for (int i=1;i<a.Length;i++) { for (j=0; j<i; j++) { if (a[i]<a[j]) break; } int temp = a[i]; for (k=i; k>j;k--) { a[k] = a[k-1]; } a[j] = temp; } Console.WriteLine("排序之后的顺序:"); foreach (int s in a) { Console.WriteLine(" {0}", s); } Console.ReadKey(); } }运行结果: