快速排序
/*快速排序的算法思想:选定一个枢纽元素,对待排序序列进行分割,分割之后的序列一个部分小于枢纽元素,一个部分大于枢纽元素,再对这两个分割好的子序列进行上述的过程。*/void swap(int a,int b){int t;t =a ;a =b ;b =t ;}
int Partition(int [] arr,int low,int high)
{
int pivot=arr[low];//采用子序列的第一个元素作为枢纽元素
while (low < high)
{
//从后往前在后半部分中寻找第一个小于枢纽元素的元素
while (low < high && arr[high] >= pivot)
{
--high;
}
//将这个比枢纽元素小的元素交换到前半部分
swap(arr[low], arr[high]);
//从前往后在前半部分中寻找第一个大于枢纽元素的元素
while (low <high &&arr [low ]<=pivot )
{
++low ;
}
swap (arr [low ],arr [high ]);//将这个枢纽元素大的元素交换到后半部分
}
return low ;//返回枢纽元素所在的位置
}
void QuickSort(int [] a,int low,int high)
{
if (low <high )
{
int n=Partition (a ,low ,high );
QuickSort (a ,low ,n );
QuickSort (a ,n +1,high );
}
}
二分查找
public
static
int
binarySearch(Integer[] srcArray,
int
des) {
int
low =
0
;
int
high = srcArray.length -
1
;
while
(low <= high) {
int
middle = low + ((high - low)>>>
1
);
if
(des == srcArray[middle]) {
return
middle;
}
else
if
(des < srcArray[middle]) {
high = middle -
1
;
}
else
{
low = middle +
1
;
}
}
return
-
1
;
}
一个排好序的数组,找出两数之和为m的所有组合
- function getM($m,$arr){
- $len=count($arr);
- $i=0;
- $j=$len-1;
- while($i<$j){
- if(($arr[$i]+$arr[$j])>$m){
- $j--;
- continue;
- }
- if(($arr[$i]+$arr[$j])<$m){
- $i++;
- continue;
- }
- if(($arr[$i]+$arr[$j])==$m){
- echo "($arr[$i]+$arr[$j]=${m})".'<br>';
- $i++;
- $j--;
- continue;
- }
- }
- }