博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
面试常问算法
阅读量:6940 次
发布时间:2019-06-27

本文共 1518 字,大约阅读时间需要 5 分钟。

快速排序 

/*快速排序的算法思想:选定一个枢纽元素,对待排序序列进行分割,分割之后的序列一个部分小于枢纽元素,一个部分大于枢纽元素,再对这两个分割好的子序列进行上述的过程。*/   

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的所有组合 

  1. function getM($m,$arr){
  2.     $len=count($arr);
  3.     $i=0;
  4.     $j=$len-1;
  5.     while($i<$j){
  6.         if(($arr[$i]+$arr[$j])>$m){
  7.             $j--;
  8.             continue;
  9.         }
  10.         if(($arr[$i]+$arr[$j])<$m){
  11.             $i++;
  12.             continue;
  13.         }
  14.         if(($arr[$i]+$arr[$j])==$m){
  15.             echo "($arr[$i]+$arr[$j]=${m})".'<br>';
  16.             $i++;
  17.             $j--;
  18.             continue;
  19.         }
  20.     }
  21. }
 
求1到1亿间所有自然数的各位数字的和是多少?
从 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1
……………………
到 9 9 9 9 9 9 9 9
得到一个8列、1亿行的数组
 
看其中任何一列:0-9都出现1千万次
 
解法如下:(0+1+2+3+4+5+6+7+8+9)*1千万*8列+1(1亿的)=45*8*1千万+1=36亿零1

 

转载于:https://www.cnblogs.com/burgeen/p/3618012.html

你可能感兴趣的文章
nginx 安装在ubuntu上
查看>>
iOS地图选址
查看>>
Shpinx在PHPCMS里的使用及配置
查看>>
Linux Oracle Rac 10G 搭建& Patch
查看>>
Apache与Nginx网络模型对比
查看>>
Java 二重循环实现对象去重
查看>>
[Unity3d]socket通信 切换到web版本时报错SecurityException解决办法
查看>>
修改windows service的启动类型
查看>>
快速构建Windows 8风格应用9-竖直视图
查看>>
Chrome浏览器设置不缓存
查看>>
YII2出现SQLSTATE[HY000] [2002] No such file or director
查看>>
搭建nginx+3*tomcat环境 实现session共享
查看>>
毕业只是开始:你准备好了吗?
查看>>
交互式自动化脚本模板
查看>>
顺丰和菜鸟对用户数据寸土不让 战争平息需监管层
查看>>
软件测试LR通用性能分析流程
查看>>
如何升级phpmyadmin
查看>>
hibernate添加时间问题
查看>>
深入浅出CChart 每日一课——第十三课 似曾相识之云图,乱花渐欲迷人眼
查看>>
Oracle操作的部分ddl语句
查看>>