二分法简单排序和查找

原创 2012年03月27日 16:56:58

    二分法排序算法思想简单描述: 在插入第i个元素时,对前面的0~i-1元素进行折半,先跟他们 中间的那个元素比,如果小,则对前半再进行折半,否则对后半 进行折半,直到left>right,然后再把第i个元素前1位与目标位置之间 的所有元素后移,再把第i个元素放在目标位置上。
直接看代码。

 public static void DichotomySort(int[] array)
        {
            for (int i = 0; i < array.Length; i++)
            {
                int start = 0;

                int end = i - 1;

                int middle = 0;

                int temp = array[i];

                while (start <= end)
                {
                    middle = (start + end) / 2;

                    if (array[middle] > temp)//要排序元素在已经排过序的数组左边
                    {
                        end = middle - 1;
                    }
                    else
                    {
                        start = middle + 1;
                    }
                }
                for (int j = i - 1; j > end; j--)//找到了要插入的位置,然后将这个位置以后的所有元素向后移动
                {
                    array[j + 1] = array[j];
                }

                array[end + 1] = temp;

            }
        }

    二分法查找。
    查找思想:当数据量很大适宜采用该方法。采用二分法查找时,数据需是排好序的。假设数据是按升序排序的,对于给定值x,从序列的中间位置开始比较,如果当前位置值等于x,则查找成功;若x小于当前位置值,则在数列的前半段中查找;若x大于当前位置值则在数列的后半段中继续查找,直到找到为止。
代码:

        public static int DichotomySearch(int[] array, int key, int high, int low)
        {
            int middle = 0;

            if (high < low)
            {
                return -1;
            }

            middle = (low + high) / 2;

            if (array[middle] == key)
            {
                return middle;
            }
            else if (array[middle] > key)
            {
                return DichotomySearch(array, key, middle - 1, low);
            }
            else
            {
                return DichotomySearch(array, key,high, middle + 1);
            }
        }

调用:

         static void Main(string[] args)
        {
            int key=0;

            Random random = new Random();

            int[] array = new int[100];

            for (int i = 0; i < 100; i++)
            {
                array[i] = random.Next(0,100);

                if(i==21)
                {
                    key = array[i];
                }
            }

            Dichotomy.DichotomySort(array);

            for (int i = 0; i < array.Length; i++)
            {
                Console.Write(array[i] + ", ");
            }


            int index = Dichotomy.DichotomySearch(array, key, array.Length-1, 0);

            Console.WriteLine();

            Console.WriteLine("查找{0},在array的位置{1}", key, index);

            Console.Read();
        }

代码下载:http://download.csdn.net/detail/yysyangyangyangshan/4177202

版权声明:本文为博主原创文章,未经博主允许不得转载。

排序算法之二分法(折半)插入排序算法

基本思想折半插入排序的基本思想与直接插入排序一样,在插入第i(i≥1)个元素时,前面i-1个元素已经排好序。区别在于寻找插入位置的方法不同,折半插入排序是采用折半查找法来寻找插入位置的。 折半查找法...
  • jlqCloud
  • jlqCloud
  • 2015年07月18日 07:59
  • 10225

排序算法——二分法插入排序

简单原理:在插入第i个元素时,对前面的0~i-1元素进行折半,先跟他们中间的那个元素比,如果小,则对前半再进行折半,否则对后半进行折半,直到left>right,然后再把第i个元素前1位与目标位置之间...
  • woaic__
  • woaic__
  • 2015年03月27日 21:28
  • 1425

二分法排序和查找(C#)

  • 2012年03月27日 16:51
  • 21KB
  • 下载

二分法, 二分排序

这几天看了一下二分法,也做了两个题目,感觉二分法中比较难以把握的就是一个边界问题,有的时候很可能因为考虑不好到底是取上确界还是下确界的问题,就会WA。 先看二分法的标准形式吧 这是 二分法...
  • u010092734
  • u010092734
  • 2014年01月18日 14:53
  • 1462

七大排序算法(冒泡,选择,插入,二分法排序,希尔,快速,合并,堆排序)的java实现(14/8/3更新加入二分排序)

冒泡排序 思路:就是每次将最大或最小的元素放到数组的最后,so easy!时间复杂度为(O(n^2)) public class BubbleSort { public static void bu...
  • oChenXiaoZuo1
  • oChenXiaoZuo1
  • 2014年04月30日 18:46
  • 2075

二分法插入排序

二分法插入排序 算法思想简单描述:在插入第i个元素时,对前面的0~i-1元素进行折半,先跟他们中间的那个元素比,如果小,则对前半再进行折半,否则对后半进行折半,直到left>right,然后再把第i个...
  • rbagglo
  • rbagglo
  • 2008年02月29日 10:48
  • 10328

//二分法排序

//二分法排序 #include void  half(int a[],int n); int main() { int i = 0;//设置循环次数 int n;//数组长度 int...
  • huangchun96
  • huangchun96
  • 2016年10月29日 23:53
  • 96

二分法 排序

//二分法  排序(面试宝典上的) //二分法排序原理:构造二叉树,小的在左,大的在右,将待排序的数依次插入,然后前序遍历即可。 //利用二叉树的构造把每个数插入到适当的位置。 //时间复杂度:...
  • ABC006250
  • ABC006250
  • 2012年07月30日 16:33
  • 925

查找与排序之二分法查找篇(C语言实现)

相比线性查找,二分法查找则显得十分高效,其查找次数与总元素数量存在对数关系,即只要较少的查找次数就可以完成快速地搜索。下面实现二分法查找: 原理:在进行二分法查找前需要先对数据进行排序(具体排序实现...
  • u011506583
  • u011506583
  • 2016年03月21日 20:59
  • 17178

二分法排序

算法思想: 对于要插入的节点,我们采用二分法和已排序队列进行比较(就是和队列中间的那个数比较大小,判断插入节点的位置是在该节点的前面还是后面),那么这样的话相对于直接插入来说,比较次数就会减少很多,...
  • jiaola
  • jiaola
  • 2012年06月01日 12:42
  • 3481
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:二分法简单排序和查找
举报原因:
原因补充:

(最多只允许输入30个字)