常用算法

算法(algorithm)

是解决特定问题求解步骤的模板,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。

1,穷举和递归。

穷举是算法中最基础的的,依次访问所有的可能情况。

递归是自己直接的或者间接的调用自己,直到出现停止条件,才返回。(如:斐波那契数列)

public static int recursion(int n){
    if(n==1){
        return 0;
    }
    if(n==2){
        return 1;
    }
    return recursion(n-1)+recursion(n-2);
}

2,排序

选择排序

每一次循环找到最大或者最小的放到有序数列中。第二次循环接着放到有序数列中直到完成。

public static void toSort1(int[] date){
    int smaller;
    for (int i = 0; i <date.length-1 ; i++) {
        smaller=i;
        for (int j = i+1; j <date.length ; j++) {
            if(date[smaller]>date[j]){
                smaller=j;
            }
        }
        if(smaller!=i){
            int temp=date[smaller];
            date[smaller]=date[i];
            date[i]=temp;
        }
    }
}

冒泡排序(优化:为排序插入true或者false防止在后几次排序完成还循环)

将相邻的两个数比较,将大(小)的一直往后交换,直到最大(最小)到最后。第二次循环继续。

public static void toSort2(int[] date){
    int temp;
    for (int i = 0; i < date.length-1; i++) {
        for (int j = 0; j < date.length-i-1; j++) {
             if(date[j]>date[j+1]){
                temp=date[j];
                date[j]=date[j+1];
                date[j+1]=temp;
            }
        }
    }
}

插入排序(优化,希尔排序)

从第二个数开始,将与前面有序的数字比较,放入其该放的位置。

public static void toSort3(int[] date){
    int current;
    for (int i = 1; i < date.length; i++) {
        current=date[i];
        for (int j = i-1; j >=0; j--) {
            if(current<date[j]){
                date[j+1]=date[j];
            }else{
                date[j+1]=current;
                break;
            }
            if(j==0){
                date[j]=current;
            }
        }
    }
}

快速排序

 从数列中挑出一个元素,称为 “基准”(pivot),重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。

private static void quick_sort(int[] arr, int low, int high) {
    // 解决和合并
    if (low <= high) {
        int mid = partition(arr, low, high);
        // 递归
        quick_sort(arr, low, mid - 1);
        quick_sort(arr, mid + 1, high);
    }

}
private static int partition(int[] arr, int low, int high) {
    // 分解
    int pivot = arr[high];
    int i = low - 1;
    int temp;
    for (int j = low; j < high; j++) {
        if (arr[j] < pivot) {
            i++;
            temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
    }
    // 交换中间元素和privot
    temp = arr[i + 1];
    arr[i + 1] = arr[high];
    arr[high] = temp;
    return i + 1;
}

其他还有堆排序,归并排序等。

使用这个网站查看各种排序的过程动画http://www.webhek.com/post/comparison-sort.html

3,查找

二分查找法(前提是有序的集合)

定义三个指针,min,max,mid,mid=(min+max)/2.

比较查找数和mid索引的值。

1,查找数大,则将min更正为mid+1.重新得到新的mid

2,查找数小,则将max更正为mid-1.重新得到新的mid

3,相等,查找到,得到查找数的索引。

如果没有找到返回-1.停止条件,min>max

public static int halfSearch(int[] arr, int number) {
    int min = 0;
    int max = arr.length-1;
    int mid = 0;
    while (min <= max) {
        mid = (min + max) / 2;
        if(arr[mid]>number){
            max=mid-1;
        }else if(arr[mid] < number){
            min = mid+1;
        }else{
            return mid ;
        }
    }
    return -1;
}

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
辽B代驾管理系统对代驾订单管理、用户咨询管理、代驾订单评价管理、代驾订单投诉管理、字典管理、论坛管理、公告管理、新闻信息管理、司机管理、用户管理、管理员管理等进行集中化处理。经过前面自己查阅的网络知识,加上自己在学校课堂上学习的知识,决定开发系统选择小程序模式这种高效率的模式完成系统功能开发。这种模式让操作员基于浏览器的方式进行网站访问,采用的主流的Java语言这种面向对象的语言进行辽B代驾管理系统程序的开发,在数据库的选择上面,选择功能强大的Mysql数据库进行数据的存放操作。辽B代驾管理系统的开发让用户查看代驾订单信息变得容易,让管理员高效管理代驾订单信息。 辽B代驾管理系统具有管理员角色,用户角色,这几个操作权限。 辽B代驾管理系统针对管理员设置的功能有:添加并管理各种类型信息,管理用户账户信息,管理代驾订单信息,管理公告信息等内容。 辽B代驾管理系统针对用户设置的功能有:查看并修改个人信息,查看代驾订单信息,查看公告信息等内容。 辽B代驾管理系统针对管理员设置的功能有:添加并管理各种类型信息,管理用户账户信息,管理代驾订单信息,管理公告信息等内容。 辽B代驾管理系统针对用户设置的功能有:查看并修改个人信息,查看代驾订单信息,查看公告信息等内容。 系统登录功能是程序必不可少的功能,在登录页面必填的数据有两项,一项就是账号,另一项数据就是密码,当管理员正确填写并提交这二者数据之后,管理员就可以进入系统后台功能操作区。项目管理页面提供的功能操作有:查看代驾订单,删除代驾订单操作,新增代驾订单操作,修改代驾订单操作。公告信息管理页面提供的功能操作有:新增公告,修改公告,删除公告操作。公告类型管理页面显示所有公告类型,在此页面既可以让管理员添加新的公告信息类型,也能对已有的公告类型信息执行编辑更新,失效的公告类型信息也能让管理员快速删除。新闻管理页面,此页面提供给管理员的功能有:新增新闻,修改新闻,删除新闻。新闻类型管理页面,此页面提供给管理员的功能有:新增新闻类型,修改新闻类型,删除新闻类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值