// 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 算法的更多相关文章

  1. iOS swift的xcworkspace多项目管理(架构思想)

    iOS  swift的xcworkspace多项目管理(架构思想) 技术说明: 今天在这里分享 swift下的 xcworkspace多项目管理(架构思想),能为我们在开发中带来哪些便捷?能为我们对整 ...

  2. iOS Swift 模块练习/swift基础学习

    SWIFT项目练习     SWIFT项目练习2 iOS Swift基础知识代码 推荐:Swift学习使用知识代码软件 0.swift中的宏定义(使用方法代替宏) 一.视图  +控件 1.UIImag ...

  3. ios swift 实现饼状图进度条,swift环形进度条

    ios swift 实现饼状图进度条 // // ProgressControl.swift // L02MyProgressControl // // Created by plter on 7/2 ...

  4. Building gRPC Client iOS Swift Note Taking App

    gRPC is an universal remote procedure call framework developed by Google that has been gaining inter ...

  5. iOS Swift WisdomScanKit图片浏览器功能SDK

    iOS Swift WisdomScanKit图片浏览器功能SDK使用 一:简介      WisdomScanKit 由 Swift4.2版编写,完全兼容OC项目调用. WisdomScanKit的 ...

  6. iOS Swift WisdomScanKit二维码扫码SDK,自定义全屏拍照SDK,系统相册图片浏览,编辑SDK

    iOS Swift WisdomScanKit 是一款强大的集二维码扫码,自定义全屏拍照,系统相册图片编辑多选和系统相册图片浏览功能于一身的 Framework SDK [1]前言:    今天给大家 ...

  7. iOS Swift WisdomHUD 提示界面框架

    iOS Swift WisdomHUD 提示界面框架  Framework Use profile(应用简介) 一:WisdomHUD简介 今天给大家介绍一款iOS的界面显示器:WisdomHUD,W ...

  8. iOS Swift WisdomKeyboardKing 键盘智能管家SDK

    iOS Swift WisdomKeyboardKing 键盘智能管家SDK [1]前言:    今天给大家推荐个好用的开源框架:WisdomKeyboardKing,方面iOS日常开发,优点和功能请 ...

  9. iOS swift项目IM实现,从长连接到数据流解析分析之Socket

    iOS  swift项目IM实现,从长连接到底层数据解析分析之Socket 一:项目简介:  去年开始接手了一个国企移动项目,项目的需求是实现IM即时通讯功能. * 一期版本功能包括了:       ...

随机推荐

  1. struts2的action的知识点和利用action向页面注入值的操作

    1.      Action的顺序,会先搜索指定名字下的包的action,如果找不到会去搜索默认路径下的包下的action. 2.      如果没有给action设置值,那么action会有一些默认 ...

  2. ListView为什么用setOnItemClick这个方法和onTouch这个方法有冲突

    因为如果onTouch方法中返回true的话,这次事件就被ListView中的item控件消费了,所以不会执行ListVIew的setOnItemClick这个方法了,如果onTouch方法返回fal ...

  3. PostgreSQL的 initdb 源代码分析之三

    继续 其实接前面,整个while循环是这样的: ) { switch (c) { ...... } ...... } 这一句,c = getopt_long(argc, argv, "dD: ...

  4. 创建虚拟交换机(New-VMSwitch)

    #获取网卡列表Get-NetAdapter

  5. 关于MVC中DropDownListFor的一个bug

    如以下代码: //后台 代码 ViewData["source_type"] = new List<SelectListItem> { "}, "} ...

  6. 【M21】利用重载技术避免隐式类型转换

    1.考虑UPint 的加法+,UPint a, b, result; 为了使result = a+10; result= 10+a; 都能通过编译,操作符重载如下: const UPint opera ...

  7. QM04-生产中的QM

    集成的计划 生产过程中的生产工序和检验工序逐渐变得更为相互依赖或者说被组合在一起.从而使来自生产和质量检验领域的工作小组共同创建工艺流程. 检验工序 可以把QM检验特性集成到生产计划(PP)模块的工作 ...

  8. Codeforces Round #327 (Div. 2) B. Rebranding 水题

    B. Rebranding Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/591/problem ...

  9. C# 利用范型与扩展方法重构代码

    在一些C#代码中常常可以看到 //An Simple Example By Ray Linn class CarCollection :ICollection { IList list; public ...

  10. zookeeper作为soa服务器集群的协调调度服务器

    zookeeper作为soa服务器集群的协调调度服务器,当然自身也支持集群. ZooKeeper搭建系列集 ZooKeeper系列之一:ZooKeeper简介 ZooKeeper系列之二:ZooKee ...