[直观学习排序算法] 视觉直观感受若干常用排序算法 以及 iOS 资料

2022-10-26,,,,

http://www.zhfish.net/?s=点击范围

1 快速排序

介绍:

快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来,且在大部分真实世界的数据,可以决定设计的选择,减少所需时间的二次方项之可能性。

步骤:

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

排序效果:

详细过程:

2 归并排序

介绍:

归并排序(Merge sort,台湾译作:合并排序)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用

步骤:

申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列
设定两个指针,最初位置分别为两个已经排序序列的起始位置
比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置
重复步骤3直到某一指针达到序列尾
将另一序列剩下的所有元素直接复制到合并序列尾

排序效果:

详细过程:

3 堆排序

介绍:

堆积排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆性质:即子结点的键值或索引总是小于(或者大于)它的父节点。

步骤:

(比较复杂,自己上网查吧)

排序效果:

详细过程:

(暂无)

4 选择排序

介绍:

选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小元素,然后放到排序序列末尾。以此类推,直到所有元素均排序完毕。

排序效果:

详细过程:

5 冒泡排序

介绍:

冒泡排序(Bubble Sort,台湾译为:泡沫排序或气泡排序)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

步骤:

    比较相邻的元素。如果第一个比第二个大,就交换他们两个。
    对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
    针对所有的元素重复以上的步骤,除了最后一个。
    持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

排序效果:

详细过程:

6 插入排序

介绍:

插入排序(Insertion Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。

步骤:

从第一个元素开始,该元素可以认为已经被排序
取出下一个元素,在已经排序的元素序列中从后向前扫描
如果该元素(已排序)大于新元素,将该元素移到下一位置
重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
将新元素插入到该位置中
重复步骤2

排序效果:

(暂无)

详细过程:

7 希尔排序

介绍:

希尔排序,也称递减增量排序算法,是插入排序的一种高速而稳定的改进版本。

希尔排序是基于插入排序的以下两点性质而提出改进方法的:

插入排序在对几乎已经排好序的数据操作时, 效率高, 即可以达到线性排序的效率
但插入排序一般来说是低效的, 因为插入排序每次只能将数据移动一位

排序效果:

黑苹果 GTX460 开启OpenCL 10.8.3

作者: zhfish 日期: 2013 年 5 月 4 日没有评论 | 16 浏览数
 

sudo perl -pi -e ‘$c+=s/\x8b\x81\x1c\x0c\x00\x00\xeb\x06\x8b\x81\x20\x0c\x00\x00/\xb8\x02\x00\x00\x00\x90\xeb\x06\xb8\x00\x00\x00\x00\x90/; END { printf “%s: %d substitution%s made.\n”,($c==1 ? “Success” : “Error”),$c,(!$c || $c>1 ? “s” : “”); $?=($c!=1); }’ /System/Library/Extensions/GeForceGLDriver.bundle/Contents/MacOS/libclh.dylib

以上代码在终端运行,会自动修改/System/Library/Extensions/GeForceGLDriver.bundle/Contents/MacOS/libclh.dylib 文件,及时生效 自动启用OpenCL

php pkcs7填充算法

作者: zhfish 日期: 2013 年 4 月 9 日没有评论 | 85 浏览数
 

function addPKCS7Padding($source){
$block = mcrypt_get_block_size(‘tripledes’, ‘cbc’);
$pad = $block – (strlen($source) % $block);
if ($pad <= $block) {
$char = chr($pad);
$source .= str_repeat($char, $pad);
}
return $source;
}

function stripPKSC7Padding($source){
$block = mcrypt_get_block_size(‘tripledes’, ‘cbc’);
$char = substr($source, -1, 1);
$num = ord($char);
if($num > 8){
return $source;
}
$len = strlen($source);
for($i = $len – 1; $i >= $len – $num; $i–){
if(ord(substr($source, $i, 1)) != $num){
return $source;
}
}
$source = substr($source, 0, -$num);
return $source;
}

iOS XCode 多人共享开发 SVN 配置需要做的小设置

作者: zhfish 日期: 2013 年 4 月 9 日没有评论 | 73 浏览数
 

UserInterfaceState.xcuserstate 文件频繁更新,*.a等静态链接库文件默认不被添加到 SVN 中,需要对自己 Mac OS 上的 SVN 客户端配置做一下修改。

进入终端:

vi ~/.subversion/config

查找 [miscellany] 字段

在默认被注释的  global-ignores 下一行,增加一行:

global-ignores = *~ #*# .#* .*.swp .DS_Store .xcuserstate

itunes search api运用之 查询app信息

作者: zhfish 日期: 2013 年 4 月 1 日没有评论 | 89 浏览数
 

向 appstore 查询已发布 APP 的信息

转自 http://hi.baidu.com/yanh105/item/7378a98ffca6a8804414cfa0
 
向 appstore 查询已发布 APP 的信息
如果我们需要实现版本的 app 自动更新,那么我们需要获取当前运行程序的版本信息和 appstore 里发布的最新版本信息。当前运行程序的版本信息,可以在 mainBundle 里面获取:NSDictionary *infoDict = [[NSBundle mainBundle] infoDictionary];
NSString *currentVersion = [infoDict objectForKey:@"CFBundleVersion"];

而 appstore 里发布的最新版本信息获取稍微复杂一些,有两种方案,思路都是一样的:
其一:在某个服务器上存储最新发布的版本信息,需要的时候向该服务器查询;

其二:在需要的时候向 appstore 查询;
在这里我来介绍第二种方法:向 appstore 查询应用程序信息,包括作者,版本,app 介绍页面地址等信息。英文好的同学可以参考 apple 的文档:www.apple.com/itunes/affiliates/resources/documentation/itunes-store-web-service-search-api.html

具体步骤如下:
1,用 POST 方式发送请求:
http://itunes.apple.com/search?term=你的应用程序名称&entity=software

更加精准的做法是根据 app 的 id 来查找:
http://itunes.apple.com/lookup?id=你的应用程序的ID

2,从获得的 response 数据中解析需要的数据。因为从 appstore 查询得到的信息是 JSON 格式的,所以需要经过解析。解析之后得到的原始数据就是如下这个样子的:
{
resultCount = 1;
results =     (
{
artistId = 开发者 ID;
artistName = 开发者名称;
price = 0;
isGameCenterEnabled = 0;
kind = software;
languageCodesISO2A =             (
EN
);
trackCensoredName = 审查名称;
trackContentRating = 评级;
trackId = 应用程序 ID;
trackName = 应用程序名称”;
trackViewUrl = 应用程序介绍网址;
userRatingCount = 用户评级;
userRatingCountForCurrentVersion = 1;
version = 版本号;
wrapperType = software;
}
);
}

然后从中取得 results 数组即可,具体代码如下所示:

NSDictionary *jsonData = [dataPayload JSONValue];
NSArray *infoArray = [jsonData objectForKey:@"results"];
NSDictionary *releaseInfo = [infoArray objectAtIndex:0];
NSString *latestVersion = [releaseInfo objectForKey:@"version"];
NSString *trackViewUrl = [releaseInfo objectForKey:@"trackViewUrl"];

如果你拷贝 trackViewUrl 的实际地址,然后在浏览器中打开,就会打开你的应用程序在 appstore 中的介绍页面。当然我们也可以在代码中调用 safari 来打开它。
UIApplication *application = [UIApplication sharedApplication];
[application openURL:[NSURL URLWithString:trackViewUrl]];

linux下小米2连接adb

作者: zhfish 日期: 2013 年 4 月 1 日2 条评论 | 107 浏览数
 

小米2的Vendor ID 是修改过的..导致adb不能识别..

把小米2的id加入到adb的配置文件中,一切ok了

echo “0×2717″ > ~/.android/adb_usb.ini

三个处理JSON格式的Mac软件

作者: zhfish 日期: 2013 年 4 月 1 日没有评论 | 73 浏览数
 

1.PListEdit Pro

2.Visual Json

3.JSON Accelerator

1要去找破解版

2,3都可以在app store下.

给自己mark

禁用 UIWebView 里面的链接长按弹出效果

作者: zhfish 日期: 2013 年 3 月 26 日没有评论 | 85 浏览数
 

转自 张宴的博客

苹果一直拒绝 UIWebView 内嵌 HTML5 页面的 iPhone、iPad APP应用上架到 App Store,建议这样的APP去做成Safari的Web应用。但是,苹果的审核人员只从界面、URL去判断是否HTML5的。有一次,一个 APP应用的URL地址被他们拷贝出来,放到浏览器中能够访问,然后,应用悲催地被拒绝上架了。

对付方法:

1、URL不让直接通过浏览器访问(UIWebView的请求Header头中加点东西,在服务器端将APP内嵌的访问和通过直接浏览器访问区分开来),或者通过浏览器访问时,返回JSON、XML信息,输出“Interface Error”,忽悠苹果审核人员说这是HTTP协议的接口,不是网页。

2、禁用、禁止 UIWebView 里面的链接长按弹出效果。加入一行 CSS 代码,禁用类似下图的链接长按弹出效果:

html,body{-webkit-touch-callout: none;}

iOS中文电子书 合集

作者: zhfish 日期: 2013 年 3 月 10 日没有评论 | 98 浏览数
 

这个,最近整理的,虽然英文的电子书更清晰更多,但我觉得中文还是最有亲和力最容易看懂的…

所以..小收集了一下,并且持续收集中..

http://pan.baidu.com/share/link?shareid=383775&uk=2080656013

nginx上安装typecho

作者: zhfish 日期: 2013 年 3 月 5 日没有评论 | 89 浏览数
 

http://about.zhfish.net

想做个Intro页,介绍自己,用wordpress,太庞大,用纯html,不好管理,思来想去,还是选择了typecho,

这个家伙虽然两年没更新了,但依旧很火,依旧简约,只是官方文档并没有说nginx的安装方法,装好后各种404.

现在总结下nginx的配置,以供需要的同学们使用

server
{
listen 80;
server_name about.zhfish.net;
index index.html index.htm index.php default.html default.htm default.php;
root /intro;

include none.conf;
location ~ .*\.(php|php5)?$
{
try_files $uri =404;
fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_index index.php;
fastcgi_param PATH_INFO $fastcgi_script_name;  #for typecho 
include fcgi.conf;
}

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}

location ~ .*\.(js|css)?$
{
expires 12h;
}

#重写规则

if (-f $request_filename/index.html){
rewrite (.*) $1/index.html break;
}
if (-f $request_filename/index.php){
rewrite (.*) $1/index.php;
}
if (!-f $request_filename){
rewrite (.*) /index.php;

}

access_log off;
}

另外在php.ini里

cgi.fix_pathinfo = 1

[直观学习排序算法] 视觉直观感受若干常用排序算法 以及 iOS 资料的相关教程结束。

《[直观学习排序算法] 视觉直观感受若干常用排序算法 以及 iOS 资料.doc》

下载本文的Word格式文档,以方便收藏与打印。