您的位置:首页 > 职场人生

几个面试常见算法

2016-04-08 00:06 274 查看
1、选择排序

基本思路:选择某个索引位置的元素,然后和后面元素依次比较,若大于则交换位置,经过第一轮比较排序后可得出最小值,然后使用同样的方法把剩下的元素逐个比较即可。

static void selectSort(int[] arry){
  for(int times = 0; times <arry.length - 1; times ++){
    int minIndex = times;
    for(int i = times + 1; i < arry.length; i ++){
      if(arry[i] < arry[minIndex]){
        minIndex = i;
      }
    }
    swap(arry,times,minIndex); // 每一轮结束后才调换位置
  }
}


2、冒泡排序

基本思路:对未排序的各元素从头到尾依次比较相邻的两个元素大小关系,若大于则交换位置,经过第一轮比较排序后可得出最大值,然后使用同样的方法把剩下的元素逐个比较即可。

static void bubbleSort(int[] arry){
  int temp = 0;
  for(int j = 0; j < arry.length -1; j++){
    for(int i = 1; i < arry.length -j; i++){
  if(arry[i-1] > arry[i]){
        temp = arry[i-1];
arry[i-1] = arry[i];
arry[i] = temp;
}
}
}
}


3、二分查找

当数据量很大适宜采用该方法;采用二分法查找时,数据需是排好序的。为了更好的理解算法,下面用一个游戏来举例。

猜数游戏: 一个朋友让你猜他正在想的一个从1到100之间的数,等你猜了,他会告诉你三种结果中的一个:你猜的比他想的大,或小,或猜中了。 为了能用最少的次数猜中,必须从50开始猜。如果他说你猜的小了,那么就能推出哪个数在50到100之间,所以马上猜75。但如果他说猜大了,你也能明白哪个说在1到50之间,所以马上猜25。如此重复,范围越来越小,直到猜到为止。

static int binarySearch(int[] arry, int key){
  int low = 0;                        // 最低索引
  int high = arry.length;             // 最高索引
while(low <= high){                 // 最低索引不能高于最高索引
  int mid = (low + high) >> 1;    // 中间索引
if(arry[mid] < key)             // key值位于大值半区
  low = mid + 1;              // 将最低索引设置为中间索引+1
else if(arry[mid] > key)        // key值位于小值半区
  high = mid - 1;             // 将最高索引设置为中间索引-1
else
  return mid;
}
return -1;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: