为了hadoop,苦研算法

慢慢积累

先来排序

快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists)。

算法步骤:

1 从数列中挑出一个元素,称为 “基准”(pivot),

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

3 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。

递归的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。虽然一直递归下去,但是这个算法总会退出,因为在每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去。

package com.james.sort;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * 快速排序分治法
 * @author james
 * jdk1.6
 */
public class DivideAndConquer {
	public static void main(String[] args) {
		Integer[] arrays = {3,2,5,8,6,1,4,4,0,11,33,22,22,11};
		List<Integer> array = Arrays.asList(arrays);
		array = sort(array);
		System.out.println(Arrays.toString(array.toArray()));
	}

	/**
	 * 分区排序
	 * @param array
	 */
	public static List<Integer> sort(List<Integer> array){
		if(array.size() == 0){
			return array;
		}
		int pivot = array.get(array.size() -1);
		System.out.println("pivot:" + pivot);
		List<Integer> tempPre = new ArrayList<Integer>(Math.round((array.size() / 2)));
		List<Integer> tempSuf = new ArrayList<Integer>(Math.round((array.size() / 2)));
		List<Integer> tempMid = new ArrayList<Integer>();
		for(int i = 0; i < array.size() ; i ++){
			if(array.get(i) < pivot){
				tempPre.add(array.get(i));
			}else if(array.get(i) > pivot){
				tempSuf.add(array.get(i));
			}else{
				tempMid.add(array.get(i));
			}
		}
		tempPre = sort(tempPre);
		tempPre.addAll(tempMid);
		tempSuf = sort(tempSuf);
		tempPre.addAll(tempSuf);
		return tempPre;
	}

}
//输出结果
[0, 1, 2, 3, 4, 4, 5, 6, 8, 11, 11, 22, 22, 33]

如果需要去重排序,去除temoMid 不做处理即可去重排序

时间: 2024-08-01 10:32:22

为了hadoop,苦研算法的相关文章

Hadoop最大值整数算法详解

环境: Linux系统centOS6.3(64bit) hadoop1.1.2 Linux下Eclipse版本 最大值算法代码: package yunSave; import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.conf.Configured; import org.apache.hadoop.fs.Path; import org.apache.h

用hadoop实现SimRank++算法(1)----权值转移矩阵的计算

本文主要针对广告检索领域的查询重写应用,根据查询-广告点击二部图,在MapReduce框架上实现SimRank++算法,关于SimRank++算法的背景和原理请参看前一篇文章<基于MapReduce的SimRank++算法研究与实现>. SimRank++的矩阵形式的计算公式为: 算法主要步骤如下: Step1: 计算权值矩阵,并获取最大Query编号和最大广告编号: Step2: 以Step1的输出作为输入,迭代计算SimRank相似度. Step3: 计算证据矩阵,并用计算结果修正Step

Hadoop最大值的算法中出现的错误(strToDouble)

错误信息: Exception in thread "main" java.lang.NumberFormatException: For input string: "?6.50685140537736" at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source) at java.lang.Double.parseDouble(Unknown Source) at yun.testStringT

K-Means 算法的 Hadoop 实现

K-Means 算法的 Hadoop 实现 K-Means 算法简介 k-Means是一种聚类分析算法,它是一种无监督学习算法.它主要用来计算数据的聚集,将数据相近的点归到同一数据蔟.学习聚类时我们需要了解聚类与分类的区别,分类的类别是我们实现设定好的,而聚类的类别是通过计算得到的. 算法原理 维基百科的算法描述如下: 已知观测集 (x1,x2,x3,...,xn) ,其中每个观测都是一个d-维实向量,k-平均聚类要把这n个观测划分到k个集合中 (k≤n) ,使得组内平方和(WCSS withi

Hadoop应用开发实战(flume应用开发、搜索引擎算法、Pipes、集群、PageRank算法)

Hadoop是2013年最热门的技术之一,通过北风网robby老师<深入浅出Hadoop实战开发>.<Hadoop应用开发实战>两套课程的学习,普通Java开发人员可以在最快的时间内提升工资超过15000.成为一位完全精通Hadoop应用开发的高端人才. Hadoop是什么,为什么要学习Hadoop? Hadoop是一个分布式系统基础架构,由Apache基金会开发.用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力高速运算和存储.Hadoop实现了一个分布式

KNN算法Hadoop实现及kaggle digit recognition数据测试

软件版本:Hadoop2.6,MyEclipse10.0 , Maven 3.3.2 源码下载地址:https://github.com/fansy1990/knn . 1. KNN算法思路 如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别.KNN算法中,所选择的邻居都是已经正确分类的对象.该方法在定类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别.-- 摘自<邻近算法>,百度百科 2. KNN算法MR实现:

Hadoop生态系统

摘要:介绍Hadoop生态系统,从Hadoop生态系统有什么成员,成员能做什么和Hadoop生态系统能够提供大数据问题解决方案两方面来认识. 关键词:Hadoop  HDFS  MapReduce   HBase  Hive  Pig Hadoop生态图,通俗地说,就是Hadoop核心模块和衍生的子项目. 一幅Hadoop生态图,让我想到了两个问题. 问题一:Hadoop生态系统包括哪些成员?每个成员各自扮演什么样的角色? 问题二:从系统论的角度来观察,Hadoop生态系统为我们破解大数据问题可

Hadoop :map+shuffle+reduce和YARN笔记分享

今天在公司做了一个hadoop分享,包括mapreduce,及shuffle深度讲解,还有YARN框架的详细说明等. v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} Normal 0 false 7.8 磅 0 2 false false false EN-US

Hadoop HDFS (3) JAVA访问HDFS之二 文件分布式读写策略

先把上节未完成的部分补全,再剖析一下HDFS读写文件的内部原理 列举文件 FileSystem(org.apache.hadoop.fs.FileSystem)的listStatus()方法可以列出一个目录下的内容. public FileStatus[] listStatus(Path f) throws FileNotFoundException, IOException; public FileStatus[] listStatus(Path[] files) throws FileNot