排序算法和设计模式简单入门

手写排序方法( 最少两种:冒泡、快速)

冒泡排序:

public class BubbleSort {
   public static void main(String[] args) {
      //冒泡排序算法
      int[] numbers=new int[]{1,5,8,2,3,9,4};
      //需进行length-1次冒泡
      for(int i=0;i<numbers.length-1;i++)
      {
         for(int j=0;j<numbers.length-1-i;j++)
         {
            if(numbers[j]>numbers[j+1])
            {
               int temp=numbers[j];
               numbers[j]=numbers[j+1];
               numbers[j+1]=temp;
            }
         }
      }
      System.out.println("从小到大排序后的结果是:");
      for(int i=0;i<numbers.length;i++)
         System.out.print(numbers[i]+" ");
   }
}

快速选择排序:

class quick_sort {
    int[] arr;
    private void swap(int x, int y) {
        int temp = arr[x];
        arr[x] = arr[y];
        arr[y] = temp;
    }
    private void quick_sort_recursive(int start, int end) {
        if (start >= end)
            return;
        int mid = arr[end];
        int left = start, right = end - 1;
        while (left < right) {
            while (arr[left] <= mid && left < right)
                left++;
            while (arr[right] >= mid && left < right)
                right--;
            swap(left, right);
        }
        if (arr[left] >= arr[end])
            swap(left, end);
        else
            left++;
        quick_sort_recursive(start, left - 1);
        quick_sort_recursive(left + 1, end);
    }
    public void sort(int[] arrin) {
        arr = arrin;
        quick_sort_recursive(0, arr.length - 1);
    }
}

手写二分查找:

int search(int nums[], int size, int target) //nums是数组,size是数组的大小,target是需要查找的值
{
    int left = 0;
    int right = size - 1;    // 定义了target在左闭右闭的区间内,[left, right]
    while (left <= right) {    //当left == right时,区间[left, right]仍然有效
        int middle = left + ((right - left) / 2);//等同于 (left + right) / 2,防止溢出
        if (nums[middle] > target) {
            right = middle - 1;    //target在左区间,所以[left, middle - 1]
        } else if (nums[middle] < target) {
            left = middle + 1;    //target在右区间,所以[middle + 1, right]
        } else {    //既不在左边,也不在右边,那就是找到答案了
            return middle;
        }
    }
    //没有找到目标值
    return -1;
}
说一下你熟悉的设计模式?

单例模式:保证实例创建一次,节省系统开销

工厂模式:代码解耦

观察者模式:定义了对象之间的一对多的依赖,这样一来,当一个对象改变时,它所有的依赖者都会收到通知并自动更新

外观模式:提供一个统一的接口,用来访问子系统中的一群接口,外观定义了一个高层的接口,让子系统更容易使用 

模版方法模式:定义了一个算法的骨架,而将一些步骤延迟到子类中,模版方法使得子类可以在不改变算法结构的情况下,重新定义算法的步骤

状态模式:允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。

OSI 的七层模型都有哪些?

物理层:利用传输介质为数据链路层提供物理连接,实现比特流的透明传输。

数据链路层:负责建立和管理节点间的链路。

网络层:通过路由选择算法,为报文或分组通过通信子网选择最适当的路径。

传输层:向用户提供可靠的端到端的差错和流量控制,保证报文的正确传输。

会话层:向两个实体的表示层提供建立和使用连接的方法。

表示层:处理用户信息的表示问题,如编码、数据格式转换和加密解密等。

应用层:直接向用户提供服务,完成用户希望在网络上完成的各种工作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值