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

版权声明:本文为博主原创文章,转载的时候记得注明出处哦~~~ https://blog.csdn.net/baidu_31657889/article/details/51724738

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!
代码:
/**
     * description : 快速排序
     * @autor kwzhang
     * modify :2012-6-20
     *
     * @param pData
     * @param left
     * @param right
     * @return
     */
    static void quicksort(int n[], int left, int right) {
        int dp;
        if (left < right) {
            dp = partition(n, left, right);
            quicksort(n, left, dp - 1);
            quicksort(n, dp + 1, right);
        }
    }
 
    static int partition(int n[], int left, int right) {
        int pivot = n[left];
        while (left < right) {
            while (left < right && n[right] >= pivot)
                right--;
            if (left < right)
                n[left++] = n[right];
            while (left < right && n[left] <= pivot)
                left++;
            if (left < right)
                n[right--] = n[left];
        }
        n[left] = pivot;
        return left;
    }

冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

  冒泡排序算法的运作如下:

  1.  比较相邻的元素。如果第一个比第二个大,就交换他们两个。
  2.  对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
  3.  针对所有的元素重复以上的步骤,除了最后一个。
  4.  持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

冒泡排序的过程图:

Bubble Sorte Animation

代码:

复制代码
 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 }


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



猜你喜欢

转载自blog.csdn.net/baidu_31657889/article/details/51724738
今日推荐