二分法排序C++
来源:互联网 发布:中国人民大学新闻 知乎 编辑:程序博客网 时间:2024/04/29 22:38
首先说一下二分法排序的原理,算法思想简单描述:
在插入第i个元素时,对前面的0~i-1元素进行折半,先跟他们
中间的那个元素比,如果小,则对前半再进行折半,否则对后半
进行折半,直到left>right,然后再把第i个元素前1位与目标位置之间
的所有元素后移,再把第i个元素放在目标位置上。
二分法排序最重要的一个步骤就是查找要插入元素的位置,也就是要在哪一个位置上放我们要准备排序的这个元素。
当我们查找到位置以后就很好说了,和插入排序一样,将这个位置以后的所有元素都向后移动一位。这样就实现了二分法排序。
然后是怎么查找着一个位置呢,就是不断的比较已排序的序列中的中间元素和要排序元素,如果大于的话,说明这个要排序的元素在已排序序列中点之前的序列。
在插入第i个元素时,对前面的0~i-1元素进行折半,先跟他们
中间的那个元素比,如果小,则对前半再进行折半,否则对后半
进行折半,直到left>right,然后再把第i个元素前1位与目标位置之间
的所有元素后移,再把第i个元素放在目标位置上。
二分法排序最重要的一个步骤就是查找要插入元素的位置,也就是要在哪一个位置上放我们要准备排序的这个元素。
当我们查找到位置以后就很好说了,和插入排序一样,将这个位置以后的所有元素都向后移动一位。这样就实现了二分法排序。
然后是怎么查找着一个位置呢,就是不断的比较已排序的序列中的中间元素和要排序元素,如果大于的话,说明这个要排序的元素在已排序序列中点之前的序列。
#include <stdlib.h>
#include <stdio.h>
void TwoInsertSort(int array[],int n)
{
int left,right,num;
int middle,j,i;
for(i = 1;i < n;i++)
{
left = 0;// 准备
right = i-1;
num = array[i];
while( right >= left)// 二分法查找插入位置
{
middle = ( left + right ) / 2; // 指向已排序好的中间位置
if( num < array[middle] )// 即将插入的元素应当在在左区间
right = middle-1; else // 即将插入的元素应当在右区间 left = middle+1; }
#include <stdio.h>
void TwoInsertSort(int array[],int n)
{
//每次查找完毕后,left总比right大一,a[left]总是存放第一个比num大的数,因此应从此处开始,每 //个元素右移一位,并将num存入a[left]中,这样就保证了a[0...i]是排好序的
for( j = i-1;j >= left;j-- )// 后移排序码大于R[i]的记录
array[j+1] = array[j];
array[left] = num;// 插入
}
}
}
看了以后就会发现,其实就是插入排序法的一种修改,当a[0],a[1]...a[i-1]排好序,寻找第i个元素在其中的位置时采用二分查找法,于是该算法称二分排序法,所以我认为这不是新的算法;另外有人说起时间复杂度是n*lgn的,其实不是,就算每次查找的时间是lgi,但是查找完毕还要移动元素,这个时间平均为i/2,于是总时间为(1/2+lg1) + (2/2 + lg2) + (3/2 + lg3) + ... + ((n-1)/2 + lg(n-1)), 约为n(n-2)/4+nlgn,所以时间复杂度还是n*n的。
0 0
- 二分法快速排序法 qsort C源码
- 二分法排序
- 二分法排序
- 二分法 排序
- 二分法排序
- 二分法排序
- 二分法排序
- 二分法排序
- //二分法排序
- 二分法排序
- 二分法排序
- 二分法排序
- 二分法排序
- 二分法排序
- C语言排序之二分法插入排序篇
- [C++]关于选择排序和二分法的举例
- C/C++冒泡排序,然后二分法搜索寻值
- 二分法查找(C/C++)
- LightOJ1007 Mathematically Hard
- Visual studio 创建项目失败vstemplate
- Visual Studio 自定义项目模板
- 如何使用git创建项目,创建分支
- Lua初识(7)_函数库
- 二分法排序C++
- 有效利用Oracle官方的免费学习资源
- 三个框架开头的限制文件加载和hibernate事务连接代码
- css float(2)
- LDA必读的资料
- 学习c语言的第一天i
- LightOJ1341 Aladdin and the Flying Carpet
- win10 uwp 截图 获取屏幕显示界面保存图片
- php中$this->是什么意思??