`
braveCS
  • 浏览: 72426 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

笔试简单基础算法

阅读更多
最近太困太累,昨天宣讲会上打盹打得啊,最后笔试稀里糊涂地写了。回来后想起自己写的,太次了。冒泡排序也能写错,生产者和消费者也挂了。这里就补上冒泡,生生产者消费者另外一篇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();
	}	
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics