算法面试题(二)

简介: 初级 1package test; 2public class Test6 { 3 4 public static void main(String[] args) { 5 int[]arr=new int[]{15,2,21,6,4,25,.

初级

 1package test;
 2public class Test6 {
 3
 4    public static void main(String[] args) {            
 5        int[]arr=new int[]{15,2,21,6,4,25,77,43};
 6        int[] maoPao = maoPao(arr);
 7        for (int i : maoPao) {
 8            System.out.print(i+" ");
 9        }
10    }
11
12    /**
13     * 冒泡排序方法
14     * @param arr   要排序的数组
15     * @return      排序之后的数组
16     */
17    public static int[] maoPao(int[] arr){
18        //前一个元素
19        for (int i = 0; i < arr.length-1; i++) {
20            //后一个元素
21            for (int j = i+1; j < arr.length; j++) {
22                //如果后面的元素小于前边的元素,互换位置
23                if(arr[j]<arr[i]){
24                    int temp=arr[i];
25                    arr[i] = arr[j];
26                    arr[j] = temp;
27                }           
28            }
29        }
30        return arr;
31    }
32}

优化级

1package test;
 2
 3    public class Test6 {
 4
 5        public static void main(String[] args) {
 6
 7            int[]arr=new int[]{15,2,21,6,4,25,77,43};
 8
 9            int[] maoPao2 = maoPao2(arr);
10            for (int i : maoPao2) {
11                System.out.print(i+" ");
12            }
13        }
14
15        /**
16         * 如果数组已经排序好了,i只执行一次循环
17         * @param arr
18         * @return
19         */
20        public static int[] maoPao2(int[] arr){
21            if(arr==null)
22                return null;
23
24            boolean isSort;
25            Long start = System.currentTimeMillis();
26            for (int i = 0; i < arr.length; i++) {
27                isSort=true;
28                for (int j = 1; j < arr.length-i; j++) {
29                    if(arr[j-1]>arr[j]){
30                        int temp=arr[j-1];
31                        arr[j-1] = arr[j];
32                        arr[j] = temp;
33                        isSort=false;
34                    }
35                }
36
37                Long end = System.currentTimeMillis();
38                if(isSort)
39                System.out.println("用时:"+(end-start));
40                    break;
41            }
42            return arr;
43        }
44    }

高逼格的代码

接口:

 1import java.util.Comparator;
 2/**
 3 * 排序器接口(策略模式: 将算法封装到具有共同接口的独立的类中使得它们可以相互替换)
 4 */
 5public interface Sorter {
 6   /**
 7    * 排序
 8    * @param list 待排序的数组
 9    */
10   public <T extends Comparable<T>> void sort(T[] list);
11   /**
12    * 排序
13    * @param list 待排序的数组
14    * @param comp 比较两个对象的比较器
15    */
16   public <T> void sort(T[] list, Comparator<T> comp);
17}
实现类:
1import java.util.Comparator;
 2/**
 3 * 冒泡排序
 4 *
 5 */
 6public class BubbleSorter implements Sorter {
 7    @Override
 8    public <T extends Comparable<T>> void sort(T[] list) {
 9        boolean swapped = true;
10        for (int i = 1, len = list.length; i < len && swapped; ++i) {
11            swapped = false;
12            for (int j = 0; j < len - i; ++j) {
13                if (list[j].compareTo(list[j + 1]) > 0) {
14                    T temp = list[j];
15                    list[j] = list[j + 1];
16                    list[j + 1] = temp;
17                    swapped = true;
18                }
19            }
20        }
21    }
22    @Override
23    public <T> void sort(T[] list, Comparator<T> comp) {
24        boolean swapped = true;
25        for (int i = 1, len = list.length; i < len && swapped; ++i) {
26            swapped = false;
27            for (int j = 0; j < len - i; ++j) {
28                if (comp.compare(list[j], list[j + 1]) > 0) {
29                    T temp = list[j];
30                    list[j] = list[j + 1];
31                    list[j + 1] = temp;
32                    swapped = true;
33                }
34            }
35        }
36    }
37}

原文发布时间为:2018-09-14

本文作者:IT技术之道

本文来自云栖社区合作伙伴"IT技术之道",了解相关信息可以关注“IT技术之道”。



相关文章
|
1月前
|
开发框架 算法 搜索推荐
C# .NET面试系列九:常见的算法
#### 1. 求质数 ```c# // 判断一个数是否为质数的方法 public static bool IsPrime(int number) { if (number < 2) { return false; } for (int i = 2; i <= Math.Sqrt(number); i++) { if (number % i == 0) { return false; } } return true; } class Progr
58 1
|
14天前
|
负载均衡 算法 应用服务中间件
面试题:Nginx有哪些负载均衡算法?Nginx位于七层网络结构中的哪一层?
字节跳动面试题:Nginx有哪些负载均衡算法?Nginx位于七层网络结构中的哪一层?
31 0
|
1月前
|
算法
覃超老师 算法面试通关40讲
无论是阿里巴巴、腾讯、百度这些国内一线互联网企业,还是 Google、Facebook、Airbnb 等硅谷知名互联网公司,在招聘工程师的过程中,对算法和数据结构能力的考察都是重中之重。本课程以帮助求职者在短时间内掌握面试中最常见的算法与数据结构相关知识点,学会面试中高频算法题目的分析思路,同时给大家从面试官的角度来分析算法题的解答技巧,从而更有效地提升求职者的面试通过率。
15 3
覃超老师 算法面试通关40讲
|
1月前
|
存储 算法
【数据结构与算法】【腾讯阿里链表面试题】算法题--链表易懂版讲解
【数据结构与算法】【腾讯阿里链表面试题】算法题--链表易懂版讲解
|
1月前
|
存储 机器学习/深度学习 算法
python常用算法,新手必会,面试必出
python常用算法,新手必会,面试必出
37 0
|
1月前
|
存储 算法 Java
【数据结构与算法】2、链表(简单模拟 Java 中的 LinkedList 集合,反转链表面试题)
【数据结构与算法】2、链表(简单模拟 Java 中的 LinkedList 集合,反转链表面试题)
42 0
|
2月前
|
机器学习/深度学习 算法 Java
递归算法还有哪些是你不知道的----【探讨Java经典遍历问题和面试题】
递归算法还有哪些是你不知道的----【探讨Java经典遍历问题和面试题】
32 1
|
3月前
|
存储 缓存 算法
数据结构与算法面试题:实现一个 LRU 缓存,支持如下操作:获取值、更新值、删除键值对和插入键值对
数据结构与算法面试题:实现一个 LRU 缓存,支持如下操作:获取值、更新值、删除键值对和插入键值对
28 0
|
3月前
|
存储 算法 Java
数据结构和算法面试题:给定一个整数数组 nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
数据结构和算法面试题:给定一个整数数组 nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
42 0
|
3月前
|
算法 Java C++
数据结构与算法面试题:实现一个函数 fill(int[] a, int n, int v),使其将大小为 n 的数组 a 填满为 v。
数据结构与算法面试题:实现一个函数 fill(int[] a, int n, int v),使其将大小为 n 的数组 a 填满为 v。
16 0

热门文章

最新文章