面试前的准备(java专业 ~学习算法排序以及查找)
2016-06-21 09:07
435 查看
java专业的马上大三,东西学的差不多,但是数据结构这块特别薄弱,所以面试前对自己数据结构进行巩固复习(PS:其实是预习啦~)
针对自己薄弱的几块进行记录:(排序和查找)
每天都在叫嚣自己会什么技术,什么框架,可否意识到你每天都在被这些新名词、新技术所迷惑,.NET、XML等等技术固然诱人,可是如果自己的基础不扎实,就像是在云里雾里行走一样,只能看到眼前,不能看到更远的地方。这些新鲜的技术掩盖了许多底层的原理,要想真正的学习技术还是走下云端,扎扎实实的把基础知识学好,有了这些基础,要掌握那些新技术也就很容易了。
要编写出优秀的代码同样要扎实的基础,如果排序和查找算法学的不好,怎么对程序的性能进行优化?废话不多说,本文要介绍的这些排序算法就是基础中的基础,程序员必知!(引自:http://www.cr173.com/html/15301_1.html)
![](https://img-blog.csdn.net/20160621091214420?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
对于上面的几种排序,面试的时候最容易问的就是快速排序和冒泡排序,所以就对这两种排序重点说明!
一、快速排序:
先说一下过程:①:选择一个基准的元素,通常选择第一个或者最后一个
②:通过一次排序讲待排序的记录分成两部分,分割的两部分分别是比基准元素大和小的两部分。
③:此时第一个基准元素就在排序好的位置上面了。
④:对排序分成的这两部分按照最初的方法在进行分割排序,直到整个序列有序
快速排序的示例:
(a)一趟排序的过程:
![](https://img-blog.csdn.net/20160621092532051?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
(b)排序的全过程
![](https://img-blog.csdn.net/20160621092540790?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
java代码实现快速排序:
(自己的叙述...)1.首先定义一个数组,数组的第一个数值为Key
2.在这个数组前后各设置一个i和j做标记
3.从 前往后遍历然后让他们与第一个数值key进行比较,当数值小于key的时候与key交换位置,一直遍历到最后一个,j--,
然后如果找到有比key小的数字,i++,
循环遍历直到i=j!
代码:
快速排序适用于数组的数值较大,以及初始化记录无序的情况!
各种排序时间复杂度和空间复杂度总结:
针对自己薄弱的几块进行记录:(排序和查找)
每天都在叫嚣自己会什么技术,什么框架,可否意识到你每天都在被这些新名词、新技术所迷惑,.NET、XML等等技术固然诱人,可是如果自己的基础不扎实,就像是在云里雾里行走一样,只能看到眼前,不能看到更远的地方。这些新鲜的技术掩盖了许多底层的原理,要想真正的学习技术还是走下云端,扎扎实实的把基础知识学好,有了这些基础,要掌握那些新技术也就很容易了。
要编写出优秀的代码同样要扎实的基础,如果排序和查找算法学的不好,怎么对程序的性能进行优化?废话不多说,本文要介绍的这些排序算法就是基础中的基础,程序员必知!(引自:http://www.cr173.com/html/15301_1.html)
1、排序
1.插入排序—直接插入排序(Straight Insertion Sort)
2. 插入排序—希尔排序(Shell`s Sort)
3. 选择排序—简单选择排序(Simple Selection Sort)
4. 选择排序—堆排序(Heap Sort)
5. 交换排序—冒泡排序(Bubble Sort)
6. 交换排序—快速排序(Quick Sort)
7. 归并排序(Merge Sort)
8. 桶排序/基数排序(Radix Sort)
对于上面的几种排序,面试的时候最容易问的就是快速排序和冒泡排序,所以就对这两种排序重点说明!一、快速排序:
先说一下过程:①:选择一个基准的元素,通常选择第一个或者最后一个
②:通过一次排序讲待排序的记录分成两部分,分割的两部分分别是比基准元素大和小的两部分。
③:此时第一个基准元素就在排序好的位置上面了。
④:对排序分成的这两部分按照最初的方法在进行分割排序,直到整个序列有序
快速排序的示例:
(a)一趟排序的过程:
(b)排序的全过程
java代码实现快速排序:
(自己的叙述...)1.首先定义一个数组,数组的第一个数值为Key
2.在这个数组前后各设置一个i和j做标记
3.从 前往后遍历然后让他们与第一个数值key进行比较,当数值小于key的时候与key交换位置,一直遍历到最后一个,j--,
然后如果找到有比key小的数字,i++,
循环遍历直到i=j!
代码:
1 public class BubbleSort{ 2 public static void main(String[] args){ 3 int score[] = {67, 69, 75, 87, 89, 90, 99, 100}; 4 for (int i = 0; i < score.length -1; i++){ //最多做n-1趟排序 5 for(int j = 0 ;j < score.length - i - 1; j++){ //对当前无序区间score[0......length-i-1]进行排序(j的范围很关键,这个范围是在逐步缩小的) 6 if(score[j] < score[j + 1]){ //把小的值交换到后面 7 int temp = score[j]; 8 score[j] = score[j + 1]; 9 score[j + 1] = temp; 10 } 11 } 12 System.out.print("第" + (i + 1) + "次排序结果:"); 13 for(int a = 0; a < score.length; a++){ 14 System.out.print(score[a] + "\t"); 15 } 16 System.out.println(""); 17 } 18 System.out.print("最终排序结果:"); 19 for(int a = 0; a < score.length; a++){ 20 System.out.print(score[a] + "\t"); 21 } 22 } 23 }
快速排序适用于数组的数值较大,以及初始化记录无序的情况!
各种排序时间复杂度和空间复杂度总结:
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 在命令行用 sort 进行排序
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序