本文共 1371 字,大约阅读时间需要 4 分钟。
视图地址:///带哨兵的插入排序中的哨兵元素有两个作用: 1、暂时存放待插入的元素 2、防止数组下标越界,当待插入的元素小于已排序的子数组中的最小元素时,j=-1,越界,而采用哨兵,arr[0]<arr[j],当j=0时,就结束循环,不会出现越界(for循环只有一次判断,提高了效率)。 但是存在一个问题: 有方法传进来的数组时原始数组,则插入第一个元素时,a[0]会被覆盖,造成最终排完序的数组缺少了原始数组的第一个元素(bug)。 如何消除此bug: 1、在调用此方法之前,将数组做下处理,使其右移一个元素的位置,空出来的第0个元素初始化为0(或不做初始化) 2、在调用方法时,做上述处理 无哨兵的插入排序,无上述问题,但在效率上会稍低,for循环中有两个判断条件。///直接插入排序 /// class Program { static void Main(string[] args) { int[] sum = {20, 50, 8, 12, 1, 0, 400, 522}; InsetSort(sum); foreach (var temp in sum) { Console.Write(temp+" "); } Console.ReadKey(); } static void InsetSort(int[] array) { for (int i = 1; i < array.Length; i++) { int temp = array[i]; int j = i - 1; while (j>=0&&temp
////// 通过哨兵插入排序 /// /// static void InsetSort2(int[] array) { if (array == null || array.Length < 2) { return; } if (array[i]
static void Main(string[] args) { int[] sum = {0,20, 50, 8, 12, 1, 400, 522}; InsetSort2(sum); for (int i = 1; i < sum.Length; i++) { Console.Write(sum[i]+" "); } Console.ReadKey(); }
转载地址:http://wcrxo.baihongyu.com/