ios Swift 算法
// Playground - noun: a place where people can play import Cocoa var nums = Int[]() for _ in ...
{
nums.append(random())
} nums ////冒泡排序 /*
var count = 0;
for(var i = 0 ; i < nums.count-1; i++){
for(var j = 0; j < nums.count-i-1;j++){
count++;
if(nums[j] > nums [j+1]){
let temp = nums[j];
nums[j] = nums[j+1];
nums[j+1] = temp;
}
}
}
count
*/ ////冒泡排序 优化版 /*
var count = 0;
var flag = true;
for (var i = 0; i < nums.count - 1 && flag ; i++) {//外层训话
flag = false;
for (var j = 0; j < nums.count - i - 1; j++) {//内层循环
count++;
if (nums[j] > nums[j + 1]) {//比较大小,大的放后面,小的放前面
var temp = nums[j];
nums[j] = nums[j + 1];
nums[j + 1] = temp;
flag = true;
}
}
} count
*/ /// //选择排序 /*
for(var i = 0; i < nums.count; i++){//外层扫面控制
var min = i;//用来记录值最小的下标,默认假设第数组第一个元素为最小。
for(var j = i; j < nums.count ; j++){ if(nums[j] < nums[min]){//找出min下标中元素还小的值的下标
min = j;//保持min始终为最小元素的小标
}
}
if i != min {
//一趟扫描结束后判断是否找出了最小的值,如果有的话就交换,将这个最小值移动到此次扫描数据的最前端
var temp = nums[i];
nums[i] = nums[min];
nums[min] = temp;
}
} nums
*/ //插入排序 /*for (var i = 1; i < nums.count; i++) {// 外层对无序列表的扫描
if (nums[i] < nums[i - 1]) {
var temp = nums[i];// 保存该点的值,等会要将该值插入适当位置
var j = i - 1;
for (; j >= 0 && temp < nums[j]; j--) {// 往后移 tips此处千万不要 是nums[i] < nums[j]来比较,
//因为nums[i]这个值在一次移位后就被覆盖了,因此也为什么要用temp来保存这个值的原因
nums[j + 1] = nums[j];// 数组往后移
}
nums[j + 1] = temp;
} } nums
*/ //希尔排序
/*
var increment = nums.count;//增量
while(increment > 1){
increment = increment/2 ;//增量计算
//一下基本同插入排序,只是直接插入排序我们比较时是增量是1,shell排序设置了一个自己的增量
for(var i = increment; i<nums.count;i++){
if(nums[i] < nums[i-increment]){
var temp = nums[i];
var j = i - increment;
for(;j >= 0 && temp < nums[j] ; j -= increment ){
nums[j+increment] = nums[j];
}
nums[j+increment] = temp
}
}
}
nums
*/ /*
//堆排序
func HeapAdjust(nums : Int[],node : Int,length : Int)
{
if ((node*2+1) <= length-1) {// 保证该节点为非叶子节点,因为叶子节点就没意义了
var child = node * 2 + 1;//字节点坐标,主要是交换完后需要以该child为节点判断以及调整大根堆
if (child + 1 <= length-1) {//如果有有右子树
if (nums[child + 1] > nums[child]) {
child++;//判断后如果右子树大于左子树,child++,即等会要操作的是左子树节点
}
} if(nums[node] < nums[child]){//大的子树与node比较
//交换
var temp = nums[node];
nums[node] = nums[child];
nums[child] = temp;
//再次重构
HeapAdjust(nums, child, length);
} }
} var n = nums.count; //step1:序列构建成大根堆
for(var i = (n-1)/2 ;i >= 0; i--){
//即对每个节点和其子节点的大根堆构造
HeapAdjust(nums, i, n);
}
nums //step2:遍历最大元素移动到末端
for(var x = (n-1) ; x > 0 ; x--){
var temp = nums[x];
nums[x] = nums[0];
nums[0] = temp;
//step3:重构
HeapAdjust(nums, 0, x);
} nums
*/ //归并排序
/*
func Merging(nums : Int[] , head: Int , mid : Int , tail : Int ) { var mius = tail-head+1
var temp : Int[] = Int[]() // tail-head+1 // 申请额外空间
for _ in 1...mius
{
temp.append(0)
}
var low = head;
var lowTow = head;
var lowTowFine = head;
var high = tail;
var j = mid + 1;
var p = 0;
mius
//两个子序列都非空
while (head <= mid && j <= tail) {
if (nums[head] > nums[j]) {
temp[p++] = nums[j++];
} else {
temp[p++] = nums[lowTow++];
}
} //第一个子序列非空,将其中剩余的元素复制到temp中
while (head <= mid) {//
temp[p++] = nums[lowTowFine++];
} //第二个子序列非空,将其中剩余的元素复制到temp中
while (j <= tail) {//
temp[p++] = nums[j++];
}
//将缓存中的刷到归并序列中
for(var q = 0 , t = low ; t <= high ; q++ , t++){
nums[t]=temp[q];//归并完成后将结果复制回R[low..high]
} //Merge
} var length = nums.count;
for (var n = 1; n < nums.count; n *= 2) {// 做logn 趟归并
var i:Int;
for (i = 0; i + 2 * n - 1 <= length-1; i = i + 2 * n) {
Merging(nums, i, i + n - 1, i + 2 * n - 1);// 归并长度为length的两个相邻子文件
}
if (i + n - 1 < nums.count-1) // 尚有两个子文件,其中后一个长度小于length
{
Merging(nums, i, i + n - 1, nums.count-1); // 归并最后两个子文件
} } nums */ /*
//快速排序
func partition( nums : Int[] , lower : Int ,higher: Int ) -> Int {
var key = nums[lower];
var numsTwo : Int[] = nums
// var temp : Int[]; var high:Int = higher
var low:Int = lower while low < high { while (low < high && numsTwo[high] >= key)
{
high--
} if (low < high) {
var temp = numsTwo[low];
numsTwo[low] = numsTwo[high];
numsTwo[high] = temp;
} while (low < high && numsTwo[low] <= key) {
low++;
}
if (low < high) {
var temp = numsTwo[low];
numsTwo[low] = numsTwo[high];
numsTwo[high] = temp;
} }
return low;
} func quickSort(nums : Int[] , low: Int , high: Int ) {
var mid:Int;
if (low < high) {
mid = partition(nums, low, high);
quickSort(nums, low, mid - 1);
quickSort(nums, mid + 1, high);
}
} quickSort(nums,0,0)
*/
基本集成通常基本算法:
大致集成:
冒泡排序 -> 选择排序->插入排序
希尔排序->堆排序->归并排序-> 快速排序
这其中每种排序都有优化排序法,需要多练习、琢磨
ios Swift 算法的更多相关文章
- iOS swift的xcworkspace多项目管理(架构思想)
iOS swift的xcworkspace多项目管理(架构思想) 技术说明: 今天在这里分享 swift下的 xcworkspace多项目管理(架构思想),能为我们在开发中带来哪些便捷?能为我们对整 ...
- iOS Swift 模块练习/swift基础学习
SWIFT项目练习 SWIFT项目练习2 iOS Swift基础知识代码 推荐:Swift学习使用知识代码软件 0.swift中的宏定义(使用方法代替宏) 一.视图 +控件 1.UIImag ...
- ios swift 实现饼状图进度条,swift环形进度条
ios swift 实现饼状图进度条 // // ProgressControl.swift // L02MyProgressControl // // Created by plter on 7/2 ...
- Building gRPC Client iOS Swift Note Taking App
gRPC is an universal remote procedure call framework developed by Google that has been gaining inter ...
- iOS Swift WisdomScanKit图片浏览器功能SDK
iOS Swift WisdomScanKit图片浏览器功能SDK使用 一:简介 WisdomScanKit 由 Swift4.2版编写,完全兼容OC项目调用. WisdomScanKit的 ...
- iOS Swift WisdomScanKit二维码扫码SDK,自定义全屏拍照SDK,系统相册图片浏览,编辑SDK
iOS Swift WisdomScanKit 是一款强大的集二维码扫码,自定义全屏拍照,系统相册图片编辑多选和系统相册图片浏览功能于一身的 Framework SDK [1]前言: 今天给大家 ...
- iOS Swift WisdomHUD 提示界面框架
iOS Swift WisdomHUD 提示界面框架 Framework Use profile(应用简介) 一:WisdomHUD简介 今天给大家介绍一款iOS的界面显示器:WisdomHUD,W ...
- iOS Swift WisdomKeyboardKing 键盘智能管家SDK
iOS Swift WisdomKeyboardKing 键盘智能管家SDK [1]前言: 今天给大家推荐个好用的开源框架:WisdomKeyboardKing,方面iOS日常开发,优点和功能请 ...
- iOS swift项目IM实现,从长连接到数据流解析分析之Socket
iOS swift项目IM实现,从长连接到底层数据解析分析之Socket 一:项目简介: 去年开始接手了一个国企移动项目,项目的需求是实现IM即时通讯功能. * 一期版本功能包括了: ...
随机推荐
- cocos2d-x 纹理源码分析
转自:http://blog.csdn.net/honghaier/article/details/8068895 当一张图片被加载到内存后,它是以纹理的形式存在的.纹理是什么东西呢?纹理就是一块内存 ...
- 编码规范系列(一):Eclipse Code Templates设置
从工作开始,经历了几个项目的开发,现在的项目一般都是一个团队共同开发,而每个人都有自己的编码习惯,为了统一格式,项目组在项目开发之前都会制定一系列的规范.俗话说约定优于配置,但是在执行过程中往往发现效 ...
- 如何知道PostgreSQL数据库下每个数据库所对应的目录
base目录,这是所有数据库目录的父目录. 在base目录下第一层,每个目录就是一个数据库所对应的文件. 那么如何知道哪个目录对应哪个数据呢? 查询如下:先看数据库列表 [pgsql@localhos ...
- Codeforces Testing Round #12 C. Subsequences 树状数组维护DP
C. Subsequences Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/597/probl ...
- 漫谈C#之关键字
每一种语言都有非常多的关键字,而且这些关键字也都大同小异,不过毕竟还是有些许的不一样.有些关键字大家碰到的多了,自然就熟悉了,但是有些关键字用得不大多,或者是新引入的,所以就不大熟悉了.我平常在用的时 ...
- c# socket通信较完善方案
c#的socket通信应用.文件较多.附件为工程. core AbstractBytesWorker.cs 字节工作器(基类),用于用于同一不同功能的字节工作器 BinaryHand.c ...
- MVC风格
MVC风格 点击了解很多其它软件体系结构风格 §模型-视图-控制器风格常被简称为MVC风格 §组件:模型.视图.控制器 §连接件:显式调用.隐式调用.其它机制(比如:Http协议) 工作机制: Mod ...
- 解决使用DevExpress开发错误:未将对象引用设置到对象的实例
在使用DevExpress是总是会出现一些状况.这次同事在他的机器上调试完成的代码发过来,却出现"未将对象引用设置到对象的实例"的错误,提示是Resources.resx的问题.另 ...
- delphi 14 内容编辑
撤销 重做 - 复制 剪切 粘贴 删除 - 全选 不选 ///编辑 ///撤销 WebBrowser1.ExecWB(OLECMDID_REDO ,1); ///重做 WebB ...
- rtp的封包与拆包h264
请看文档rfc3984 1.看h264的帧 SPS序列參数帧 00 00 00 01 67 64 . . .. PPS图像參数帧 00 00 00 01 68 EE... . I帧 00 00 00 ...