`
piperzero
  • 浏览: 3474041 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

基础算法(二)

 
阅读更多

上一篇:基础算法(一)

1. 冒泡排序(BubbleSort)

原理:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。
  由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。
  用二重循环实现,外循环变量设为i,内循环变量设为j。外循环重复9次,内循环依次重复9,8,...,1次。每次进行比较的两个元素都是与内循环j有关的,它们可以分别用a[j]和a[j+1]标识,i的值依次为1,2,...,9,对于每一个i,j的值依次为1,2,...10-i。

实现的代码如下:

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

2. 选择排序

原理:n个数的直接选择排序可经过n-1趟直接选择排序得到有序结果:
①初始状态:无序区为R[1..n],有序区为空。
②第1趟排序,在无序区R[1..n]中选出关键字最小的记录R[k],将它与无序区的第1个记录R[1]交换,使R[1..1]和R[2..n]分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。
……
③第i趟排序,第i趟排序开始时,当前有序区和无序区分别为R[1..i-1]和R(i..n)。该趟排序从当前无序区中选出关键字最小的记录R[k],将它与无序区的第1个记录R交换,使R[1..i]和R分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。
这样,n个数的直接选择排序可经过n-1趟直接选择排序得到有序结果。

实现的代码如下:

public static void selectionSort(int[] array) {
		for(int i = 0; i < array.length - 1; i++) {
			int min = i;
			for(int j = i + 1; j < array.length; j++) {
				if(array[j] < array[min]) {
					min = j;
				}
			}
			if(min != i) {
				int temp = array[min];
				array[min] = array[i];
				array[i] = temp;
			}
		}
}

3. 寻找孤立数字
需求:给定一个数组,数组内的数两两相同,只有一个数是孤立的,用最快的方式找出这个数。

分析:循环数组,判断第i个元素的值和其它位置的值是否相等,如果不存在相等的,那么这个数就是孤立数据。

实现的代码如下:

int[] array = {1, 2, 3, 2, 3, 1, 4};
int single = 0;
for(int i = 0; i < array.length; i++) {
  boolean isSingle = true;
  for(int j = 0; j < array.length; j++) {
    if(j != i && array[i] == array[j]) {
      isSingle = false;
      break;
    }
  }
  if(isSingle) {
    single = array[i];
    break;
  }
}
显然这样的嵌套循环判断复杂度是很高的,所以使用^,则实现的代码如下:

int[] array = {1, 2, 3, 2, 3, 1, 4};
int single = array[0];
for(int i = 1; i < array.length; i++) {
		single ^= array[i];
}

一个for循环搞定,不怕做不到,就怕想不到。

4. 进制转换

将一个整型数据转换成二进制字符串。

分析:整型一共32位,最高位代表正负,那么得到第i位的数只需要将整数右移i-1位,实现的代码如下;

public static String toBinary(int value) {
		StringBuilder build = new StringBuilder();
		if(value > 0) {
			build.append(0);
		} else {
			build.append(1);
			value = -value;
		}
		for(int i = 30; i >= 0; i--) {
			build.append(value >> i & 1);// 和1做与操作之后,该位置之前的数全部干掉
		}
		return build.toString();	
}

本文来自:高爽|Java And Flex Corder,原文地址:http://blog.csdn.net/ghsau/article/details/7410447

分享到:
评论

相关推荐

    编程基础算法引导 算法学习

    第二次ACM集训基础算法引导,初学编程的时候,学习用的额,自己感觉很受益,于是分享下。

    一 基础算法.doc

    一 基础算法.doc 一 基础算法 1.1 递推法 1.2 贪心法 1.3 递归法 1.4 分治法 1.5 枚举法 1.6 模拟法 二 顺序统计算法和中位数 2.1 顺序统计的算法 2.2 中位数的应用

    信息学奥赛一本通 提高篇 第一部分 基础算法 第2章 二分与三分.pdf

    信息学奥赛一本通 提高篇 第一部分 基础算法 第2章 二分与三分.pdf

    基础算法题目精简集合

    基础算法题目精简集合 题目相对来说简要了一些,算是有代表性了,各方面都有题目 偶不希望像别的帖子那样像为了凑数般弄够100题,相反这里不过二三十。 前六章均为算法基础入门必会解答的题目,也就是若当中有任何一...

    智能建造基础算法-第二章-3-主成分分析

    矩阵分析在机器学习算法中的应用非常广泛 一个经典的应用就是主成分分析(Principal Component Analysis, PCA),是一种数据降维算法 很多数据处理的实际问题中都会出现向量维数过高的问题,处理高维向量时,若直接...

    基础算法-python二进制与十进制的相互转换

    【基础算法】-python二进制与十进制的相互转换 # 二进制转换十进制方法一: def BtoD(n): d=0 power=0 while n&gt;0: d+=2**power*(n%10) n//=10 power+=1 return d num=int(input('请输入一个二进制数字:')) ...

    算法竞赛宝典2基础算法艺术

    资源名称:算法竞赛宝典2 基础算法艺术资源截图: 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。

    智能建造基础算法-第二章-1-向量和矩阵

    向量的理解角度: 一般可以将向量理解为空间里带方向、长度、出发端点和结束端点的量 建立一个坐标系,以出发端点为原点,则向量数组中的每个元素就是该向量在各坐标轴上的坐标,从原点出发到结束端点的方向就是此...

    最优秀的基础算法教案

    学习算法基础的最好的教案,里面包含各种基础算法,如下: 第一课 算法简介 第二课 多精度数值处理 第三课 排列与组合 第四课 枚举法 第五课 递归与回溯法 第六课 递推法 第七课 贪心法 第八课 分治法 第九课 ...

    计算机算法基础(第二版)

    计算机算法基础(第二版),用超星阅览器

    人工智能基础算法.docx

    人工智能基础算法全文共4页,当前为第1页。人工智能基础算法全文共4页,当前为第1页。一、粒子群算法 人工智能基础算法全文共4页,当前为第1页。 人工智能基础算法全文共4页,当前为第1页。 粒子群算法,也称粒子群...

    智能建造基础算法-第二章-2-二次型至广义逆

    对向量值函数进行求导时,可按求导分式的分母或分子进行布局,得到结果矩阵 按分母布局的方式为:对一个列向量值函数求导,相当于是将每个列向量的分量展开成一行,最终形成一个矩阵;同理,当对一个行向量值函数...

    智能建造基础算法-第四章

    提出背景:由著名的美国计算机科学家冯·诺伊曼等在第二次世界大战中研制原子弹(“曼哈顿计划”)时首先提出。“蒙特卡洛”这一名字来源于摩纳哥的蒙特卡洛(Monte Carlo,以赌博闻名) 思想:蒙特卡洛方法也称为随机...

    基础算法教案.doc

    基础算法教案 推荐学习 第一课 算法简介 1 第二课 多精度数值处理 1 第三课 排列与组合 6 第四课 枚举法 9 第五课 递归与回溯法 25 第六课 递推法 42 第七课 贪心法 50 第八课 分治法 64 第九课 模拟法 70 习题 79

    计算机图形学的算法基础第二版

    全面介绍了计算机图形学里涉及的各种基础算法实现,是提高功力的好书

    零基础学算法(第二版)源码

    零基础学算法全部源码下载,方便大家学习交流

    算法设计与分析基础 第二版完整版

    算法设计与分析基础 第二版完整版

    计算机图形学的算法基础(原书第二版)

    关于计算机图形学算法的书,描述了基本算法的执行细节,有利于初学者体会到算法的基本原理。 现在有20M的权限,可以一次传上来了。 一本很不错的书。

    计算机算法基础(第二版)

    计算机算法基础第二版,pdf格式,余祥宣等著,华中科技大学出版社

    计算机算法基础(第二章)

    计算机算法基础 只有第二章 ppt

Global site tag (gtag.js) - Google Analytics