[哪位帮我讲讲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...