ios Swift 算法

// Playground - noun: a place where people can play

import Cocoa

var nums = Int[]()

for _ in 1...50
{
    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 算法

时间: 2024-12-24 06:52:02

ios Swift 算法的相关文章

ios Swift 国外资源

Swift国外资源汇总(No.1) 此类分享贴暂定每2天更新一次,主要目的是让大家能跟国外开发者们同步,共享知识和共同提高. 对于一些非常有价值的文章,大家有兴趣可以自行翻译(回贴跟我说一声,避免重复劳动,之后发布到论坛或自己blog都可以),我也会将相关链接同步到本贴. 编程思想 Why Objective-C is doomed主要观点:1. Swift跟ObjC互用做的非常好 2. 预计未来会出现Swift-first趋势,官方库和第三方库都会优先考虑Swift实现 3. iOS&OS X

[IOS]swift自定义uicollectionviewcell

刚刚接触swift以及ios,不是很理解有的逻辑,导致某些问题.这里分享一下swift自定义uicollectionviewcell 首先我的viewcontroller不是直接继承uicollectionviewcontroller,而是添加的uicollectionview到我的storyboard, 然后再新建一个swift的文件,让这个swift继承uicollectionviewcell import Foundation class SVGCell :UICollectionView

iOS:Swift界面实例1, 简单界面

Apple推出了基于Objective-C的新语言Swift. 通过实例, 我们可以很好的感受这门新语言 注意事项: 在XCode6_Beta中, 如果有中文, IDE的自动补全功能就会失效, 所以开始调试的时候可以先用英文, 后面再用中文替代. 1. 新建iOS -> Single View Application. 2. 修改AppDelegate.swift文件 1 // 2 // AppDelegate.swift 3 // UIByCode_Swift_1_HelloWorld 4 /

iOS - Swift UISearchController仿微信搜索框

0x01.创建一个UISearchController 如果传入的searchController为nil,则表示搜索的结果在当前控制器中显示,现在我让它在searchVC中显示. // 创建searchResultVC let searchVC = UIViewController() // 设置背景颜色为红色 searchVC.view.backgroundColor = UIColor.red let searchController = UISearchController(search

ios Swift 备忘录

Variables var myInt = 1 var myExplicitInt: Int = 1 // explicit type var x = 1, y = 2, z = 3 // declare multiple integers myExplicitInt = 2 // set to another integer value Constants let myInt = 1 myInt = 2 // compile-time error! Strings var myString =

ios Swift 资源池

Swift入门教程: http://www.cocoachina.com/applenews/devnews/2014/0604/8661.html Swift视频教程: http://www.cocoachina.com/bbs/read.php?tid=204280 Swift官方文档(PDF版): http://www.cocoachina.com/bbs/read.php?tid=204446 Swift官方文档(网页版): https://developer.apple.com/lib

ios Swift 之github

1. 软件类 a) 作者集合 http://nondot.org/sabre/ b) swift for facebook SWIFT是一个易于使用的,基于注解的Java来创建勤俭节约序列化类型和服务库. https://github.com/facebook/swift 2. 游戏类 a)FlappySwift https://github.com/fullstackio/FlappySwift b) 2048 https://github.com/austinzheng/swift-2048

ios swift reduce Method

Swift’s API includes many functions and instance methods that reflect its functional programming heritage. A prime example is called reduce.  You can reduce a collection of values down to just one value, such as calculating the sum of every person’s

ios Swift ! and ?

swift ?和!之间区别: Swift 引入的最不一样的可能就是 Optional Value 了.在声明时,我们可以通过在类型后面加一个? 来将变量声明为 Optional 的.如果不是 Optional 的变量,那么它就必须有值.而如果没有值的话,我们使用 Optional 并且将它设置为 nil 来表示没有值. //num 不是一个 Int var num: Int? //num 没有值 num = nil //nil //num 有值 num = 3 //{Some 3} Apple