各种算法八
今天继续我们的各种基本算法滴呀;
先来看看我们的插入排序滴呀;先来看看原理,网上找的一个非常好的实例gif
我们已经看到了我插入排序的原理,那么下面,如何将显示映射带代码中,
然后通过代码来一步一步的实现了
//我们先看看,这个基本的算法; //方式一;就是一种方式的改写; public static void InsertSort(int [] arr) { for(int i = 1; i < arr.Length; i++) { int insertValue = arr[i]; int insertIndex = i - 1;//插入到他的前面; while (insertIndex >= 0 && insertValue < arr[insertIndex]) { arr[insertIndex + 1] = arr[insertIndex]; insertIndex--; }//一旦不满足他的条件,就跳出这个东东,插入; arr[insertIndex + 1] = insertValue; } Console.WriteLine("最总的结果"); foreach (var i in arr) { Console.Write(" {0} ", i); }
然后......
上面的那个是一步一步的去实现的,
我这个是先找到指定的位置之后,然后我们再去进行移动和替换滴滴呀;效果还是可以滴呀;
算了,我**妈,头都挣爆炸了;
附带一个不太完整的代码;请大神指点:
public static void InsertSort() { //基本个各种插入排序; //我们可以将数组元素的第一元素看成是是一个已经排好序的一个小数组,第二个元素和这个小数组进行比较滴呀; //这样的一个过程如何用代码来实现滴呀;实现由显示到虚拟的一个映射过程滴呀; //循环的从数组中取出 //从显现实到虚拟的一步一映射; var arr = new int[] {5,6,2,3,1}; //从数组中抽取元素,我们肯定会用到for循环; //笔记数的大小我们可定会用到> or < //插入其实就是一个赋值的过程 //数组向后依次向后移动,肯定就是数组小标的改变滴呀; //算法真的好费脑筋; var len = arr.Length; for(var i = 0; i < len - 1; i++) //往后进行遍历 { for(var j = i-1; j >= 0; j--) //往前进行遍历; { if (arr[i]>arr[j]) // 这里的判断条件有问题; { Move(i,j,arr); //开始移动我们的额数组滴呀; Insert(j, arr[i], arr); //你麻痹移动了之后我们还要插入滴呀;,插在他的前面 你妈卖比,,日尼玛的笔呀 } } //如果找打尽头还没找到小于它的数,就把它移动到前面; //我日你的码的呀; } Console.WriteLine("最总的结果"); foreach (var i in arr) { Console.Write(" {0} ",i); } } public static void Move(int i,int j,int [] arr) { for(var index = i; index > j; index--) { //然后开始移动 移动是从后开始; arr[index] = arr[index - 1]; } } public static void Insert(int index,int value,int [] arr) { arr[index] = value; }
今天先这里........