笔试简单基础算法
2015-12-22 00:00
369 查看
最近太困太累,昨天宣讲会上打盹打得啊,最后笔试稀里糊涂地写了。回来后想起自己写的,太次了。冒泡排序也能写错,生产者和消费者也挂了。这里就补上冒泡,生生产者消费者另外一篇http://bravecs.iteye.com/blog/1720415 。提醒自己做事不能随便,不能差不多,不能浮躁
import java.util.Scanner; class Sort { private int[] a; private int len; private int count; //从console中输入 public void input() { Scanner scanner=new Scanner(System.in); String str=scanner.nextLine(); String[] temp=str.split(","); len=temp.length; a=new int[len]; for(int i=0;i<len;i++) a[i]=Integer.parseInt(temp[i]); } //显示 public void show() { for(int i=0;i<len;i++) System.out.print(a[i]+","); System.out.println("\n比较次数:"+count); } //冒泡排序 public void sort() { boolean flag=false; count=0; int temp; for(int i=0;!flag&&i<len-1;i++) { flag=true; for(int j=0;j<len-i-1;j++) { if(a[j]<a[j+1]) { temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; flag=false; count++; } } } } /** * 二分法dichotomy查找 非递归recursion * 前提:已排好序 */ public int dichotomy(int target) { int start=0,end=a.length-1,middle; while(start<end) { middle=(start+end)/2; if(a[middle]==target) return middle; else if(a[middle]<target) end=middle-1; else start=middle+1; } return start==end&&a[start]==target?start:-1; } /** * 二分法dichotomy查找 递归 recursion * 前提:已排好序 */ public int dichotomy(int target,int start,int end) { if(start>end) return -1; if(start==end) return a[start]==a[end]?start:-1; int middle=(start+end)/2; if(a[middle]==target) return middle; if(a[middle]<target) return dichotomy(target,start,middle-1); else return dichotomy(target,middle+1,end); } } public class Cs { public static void main(String[] args) { Sort cs=new Sort(); cs.input(); cs.sort(); cs.show(); } }
相关文章推荐
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法
- Ruby实现的合并排序算法
- C#折半插入排序算法实现方法
- 基于C++实现的各种内部排序算法汇总
- C++线性时间的排序算法分析
- C++实现汉诺塔算法经典实例
- PHP实现克鲁斯卡尔算法实例解析