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

面试前的准备(java专业 ~学习算法排序以及查找)

2016-06-21 09:07 435 查看
java专业的马上大三,东西学的差不多,但是数据结构这块特别薄弱,所以面试前对自己数据结构进行巩固复习(PS:其实是预习啦~)

针对自己薄弱的几块进行记录:(排序和查找)

每天都在叫嚣自己会什么技术,什么框架,可否意识到你每天都在被这些新名词、新技术所迷惑,.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  }


快速排序适用于数组的数值较大,以及初始化记录无序的情况!
各种排序时间复杂度和空间复杂度总结:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息