// 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. 网络复习之TCP

    可靠传输的工作原理 1 停止等待协议 每发送完一个分组,就停止发送,等待对方确认.出现差错,超时重传.     1.1 暂时保留已发送的分组的副本     1.2 分组和确认分组必须进行编号     ...

  2. openssl数字证书常见格式与协议介绍

    原文地址:http://blog.csdn.net/anxuegang/article/details/6157927 证书主要的文件类型和协议有: PEM.DER.PFX.JKS.KDB.CER.K ...

  3. 基础数据结构 之 栈(python实现)

    栈是编程开发中的两种较为简单的数据结构.栈和队可用于模拟函数的递归.栈的特点是后进先出.其常用操作包括:出栈,入栈等.在出栈前,需判断栈是否为空.在入栈时,需判断栈是否已满. 下面给出一个用pytho ...

  4. C#实现注销、重启和关机代码

    首先要导入对命名空间 using System.Runtime.InteropServices; 的引用 [StructLayout(LayoutKind.Sequential, Pack = 1)] ...

  5. DWRUtil is not defined

    错误:DWRUtil is not defined; 解决方法: 先检查页面中是否正确引入uitl.js <script type="text/javascript" src ...

  6. iOS开发——语法&高级Block练习

    高级Block练习 一 .最简单的block使用 使用block的三个步骤:1.定义block变量 2.创建block代码块 3.调用block匿名函数 定义一个block的构成包括:返回值,bloc ...

  7. iOS开发——动画篇Swift篇&炫酷弹出菜单

    炫酷弹出菜单   这个是一个第三方按钮菜单组件,原版是使用Objective-C编写的名为AwesomeMenu的组件,地址是:https://github.com/levey/AwesomeMenu ...

  8. 步进循环语句for

    一.for语句的基本格式 for 变量 in 列表 do 语句块 done 二.使用for语句处理列表(数组) [root@localhost shell]# cat use_for_deal_wit ...

  9. Link List

    At first, i prepared to go through <the introduction to algorithm> ,however , i found some par ...

  10. ajax生成html双引号问题

    //动态创建列表 function createLists(result){ var len=result.length,i; for(i=0;i<len;i++){ $myLi = $(&qu ...