2019年java中高级java面试题(八)数据结构与算法

1、快速排序

会把数组中的一个数当做基准数,一般把数组中最左边得数当做基准数。然后从两边开始检索。先从右边检索比基准数小的,再从左边检索比基准数大的。如果检索到了,九停下,然后交换这两个元素。然后再继续检索。

一旦相遇停止检索,交换基准数和相遇位置的元素。

先排基准数左边再排右边

package com.hzau.itdog;

import java.util.Arrays;

public class Test {

	public static void main(String[] args) {
		int[] arr= {6,3,8,10,9,85,2,1,120,654654};
		quickSort(arr,0,arr.length-1);
		System.out.println(Arrays.toString(arr));

	}

	public static void quickSort(int[]arr,int left,int right) {
		//左边索引不能大于右边索引
		if(left>right) {
			return;
		}
		//定义基准数
		int base=arr[left];
		//左边
		int i=left;
		//右边
		int j=right;
		//i和j不相遇在循环中检索
		while(i!=j) {
			//j先从右往左检索比基准数小的就停下
			//比基准数大继续检索
			while(arr[j]>=base &&i<j) {
				j--;
			}
			//找到比基准数小
			//i从左往右
			while(arr[i]<=base &&i<j) {
				i++;
			}
			//交换i和j位置的元素
			int temp=arr[i];
			arr[i]=arr[j];
			arr[j]=temp;
		}
		//i和j相遇交换基准数和相遇位置元素
		arr[left]=arr[i];
		arr[i]=base;
		//基准数左边比基准数小,右边比基准数大
		//排左边
		quickSort(arr,left,i-1);
		//排右边
		quickSort(arr,i+1,right);
	}
}

2、LRU算法

有一类很重要的算法就是内存页面置换算法(包括FIFO,LRU,LFU等几种常见页面置换算法)。事实上,Cache算法和内存页面置换算法的核心思想是一样的:都是在给定一个限定大小的空间的前提下,设计一个原则如何来更新和访问其中的元素。下面说一下LRU算法的核心思想,LRU算法的设计原则是:如果一个数据在最近一段时间没有被访问到,那么在将来它被访问的可能性也很小。也就是说,当限定的空间已存满数据时,应当把最久没有被访问到的数据淘汰。

发布了61 篇原创文章 · 获赞 48 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/hzau_itdog/article/details/91374610