范文无忧网范文学习范文大全

vb快速排序之二分法代码

03月24日 编辑 fanwen51.com

[哪位帮我讲讲java中的快速排序法]快速排序是对冒泡排序的一种改进。它的基本思想是:通过一躺排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按次方法对这两...+阅读

vb快速排序之二分法代码

Public Function BinSearch(ByRef strElement() As String, ByVal strKey As String) As Long

Dim lngLow As Long

Dim lngHigh As Long

Dim lngMiddle As Long

lngLow = 0

lngHigh = UBound(strElement)

While (lngLow lngMiddle = (lngLow + lngHigh) / 2

If strElement(lngMiddle) = strKey Then

BinSearch = lngMiddle

Exit Function

Else

If strElement(lngMiddle) >strKey Then

lngHigh = lngMiddle - 1

Else

lngLow = lngMiddle + 1

End If

End If

End While

BinSearch = -1 '查找失败

End Function

c对9 1 8 2 7 3 6 4 5用二分法排序成升序!求写法!求高人指教!

快速排序法(即是二分排序)的思想是,找到一个值,要求这个值的左边都是小于等于这个值的,右边则大于等于这个值。

例如: int a[9]={9,1,8,2,7,3,6,4,5}

一步步演示如下:

设3个变量,i=0,j=8,fence=8 (都是下标)

i表示左边开始的元素9的下标,j表示最右边的元素5的下标,fence表示中间值的下标,初始为最右,即8。运作的时候i会往右靠,j会往左靠。

我们的目标是给数值5找一个合适的位置,让它满足上述条件。

1.i从0开始递增,每个数都和5比较,如果找到一个比5大的数,则和5交换位置。同时更新fence和i

执行后:a[9]={5,1,8,2,7,3,6,4,9} i = 1; fence = 0; (记住fence总是指示5所指的位置。)

2.j从8开始递减,每个数都和5比较,如果找到一个比5小的数,则和5交换位置。更新fence 和j

执行后:a[9]={4,1,8,2,7,3,6,5,9} j = 6; fence =7;

3.执行1的步骤:

执行后:a[9]={4,1,5,2,7,3,6,8,9} i =3 ; fence =2;

4.执行2的步骤

执行后:a[9]={4,1,3,2,7,5,6,8,9} j = 4 fence =5;

5.执行后a[9]={4,1,3,2,5,7,6,8,9} i = 5 fence =4;

至此判断 i已经大于j 中断循环 返回 fence的值,

那么经过一次排序后的结果就是a[9]={4,1,3,2,5,7,6,8,9}

5是选择的中间值,排在下标为4的位置

那么用递归对 下标为0到3,下标为5 到8 分别执行同样的排序就可以了。

这就是二分法的思想,即是快速排序。

代码如下:

#include #include int partition(int *a, int l, int r){ int fence = r; --r; while(l<=r) { while(l<=r) { if(a[l]>a[fence]) { std::swap(a[l],a[fence]); fence = l; ++l; break; } ++l; } while(l<=r) { if(a[r] { std::swap(a[r],a[fence]); fence = r; --r; break; } --r; } } return fence; } void quickSort(int *a, int l, int r){ if(l { int p = partition(a,l,r); quickSort(a,l,p-1); quickSort(a,p+1,r); } } int main() { int a[9]={9,1,8,2,7,3,6,4,5}; quickSort(a,0,8); for(int i=0;i<9;++i) std::cout<< }

延伸阅读:

请问Java快速排序法是怎么算的* 步骤为: * 1. 从数列中挑出一个元素,称为 "基准"(pivot), * 2. 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在...

java中快速排序的算法举个例子package person.test; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Random; /** * cl...

Java快速排序法是怎么算的/** * 快速排序 * 快速排序使用分治法(Divide and conquer)策略来把一个序列(list)分为两个子序列(sub-lists)。 * 步骤为: * 1. 从数列中挑出一个元素,称为 "基准"(pivot), * 2. 重新排...

二分法求函数零点一般地,对于函数f(x),如果存在实数c,当x=c是f(c)=0,那么把x=c叫做函数f(x)的零点。 解方程即要求f(x)的所有零点。 先找到a、b,使f(a),f(b)异号,说明在区间(a,b)内一定有零点,然后求f...

怎样利用二分法找零点利用二分法思想巧解零点存在性问题孔祥武 【摘要】:正二分法可用于求方程的近似解,在处理一类函数零点存在性问题时,利用二分法也可使问题快速获解,达到事半功倍的效果.例1已知...

怎样用二分法求函数零点就是求2个点的中点的值 比如f(x)中f(a)>0,f(b)<0 那就求f((a+b)/2)的值 如果f((a+b)/2)>0把f((a+b)/2)赋值给f(a),f(b)不变,继续重复上面的过程。 如果f((a+b)/2)<0把f((a+b)/2...

怎样用二分法求解函数的零点①先求导,确定单调区间 ②单调递减区间最大值<0,或单调递增区间最大值>0,该区间内无零点。 ③除②的情况以外的单调区间在单调区间内找到符合f(x₁)·f(x₂)<0的点(x₁<x₂),以(x₁...

二分法求函数fx x32的零点对于函数f(x),如果存在实数c,当x=c时,若f(c)=0,那么把x=c叫做函数f(x)的零点。 通过每次把f(x)的零点所在小区间收缩一半的方法,使区间的两个端点逐步迫近函数的零点,以求得零点的...

哪位高手帮忙详细解释下这个vb代码动物管理员游戏的谢 !哪位高手帮忙详细解释下这个vb代码动物管理员游戏的谢 !For i = 0 To 7 For j = 0 To 7 '画图标 picGrid.PaintPicture PC1.GraphicCell(Grid(i, j)), i * 34, j * 34 Next N...

推荐阅读
图文推荐
栏目列表