折半插入排序

来源:互联网 发布:网络十大神曲 编辑:程序博客网 时间:2024/06/01 19:29

折半插入排序相对于插入排序来说次数能少一点,因为插入时,前方元素已排序好,所以只用和中间那个元素比较,比中间元素小,那就从0——中间元素这一段继续和中间元素比较,依次类推下去。右边也一样。


代码如下:

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace 折半查找插入排序{    class Program    {        static void Main(string[] args)        {            // 待排序的数组            int[] array = { 1, 0, 2, 5, 3, 4, 9, 8, 10, 6, 7 };            binaryInsertSort(array);            // 显示排序后的结果。            Console.WriteLine("排序后: ");            for (int i = 0; i < array.Length; i++)            {                Console.Write(array[i] + " ");            }            Console.ReadKey();        }        /// <summary>        /// 插入排序        /// </summary>        /// <param name="array">要排序的数组</param>        private static void binaryInsertSort(int[] array)        {            for (int i = 1; i < array.Length; i++)            {                int temp = array[i];                int low = 0;//左方元素下表为0                int high = i - 1;//我们要插入元素下标为i,所以已排序数组最右边下标为i-1                while (low <= high)                {                    int mid = (low + high) / 2;//前方已排序数组1分为2                    /*如果新加入元素比中间元素小,那就是使                     * high=mid-1,而low不变,意思就是只用在左边                     * 进行查找了                     */                    if (temp < array[mid])                    {                        high = mid - 1;                    }                          /*新插入元素比中间元素大,那么就只用在右方查找了                         * 让low=mid+1,而high不变                         */                    else                    {                        low = mid + 1;                    }                }                /*上方代码执行完毕之后low的前方应该插入我们想要                 * 插入的元素,此时low后方元素整体后移一位                 * 移动完之后low这个位置把我们要加进去的元素放进去                 * 就OK了                 */                for (int j = i; j >= low + 1; j--)                {                    array[j] = array[j - 1];                }                array[low] = temp;            }        }    }}


0 0
原创粉丝点击