// 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. ags注册

    在电脑里找到2个 ESRIRegAsm.exe C:\Program Files (x86)\Common Files\ArcGIS\bin C:\Program Files\Common Files ...

  2. Redis学习_01 windows下的环境搭建

    一.Redis 简介 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset( ...

  3. hibernate之saveorupdate()、save()、update()都有什么区别

    saveorupdate()如果传入的对象在数据库中有就做update操作,如果没有就做save操作. save()在数据库中生成一条记录,如果数据库中有,会报错说有重复的记录. update()就是 ...

  4. Thinkphp框架----微信公众测试号开发

    最开始的一个步骤.注册一个微信公众测试号.URL:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login; 接口配置的信息,对新手 ...

  5. update更新两个字段

    update更新两个字段时的sql语句: update tj_record set is_recycle_reprint_guide='1' , recycle__guide_date=now() w ...

  6. BW知识点总结及面试要点

    1.       如何理解数据仓库? 数据仓库 是 一个面向主题的,集成的,相对稳定的,反应历史变化的数据集合,用于支持管理决策. 2.       OLAP 和 OLTP的基本概念 和 区别? Ol ...

  7. Codeforces Round #331 (Div. 2) E. Wilbur and Strings dfs乱搞

    E. Wilbur and Strings Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/596 ...

  8. Codeblocks支持C++11

    Setting->Compiler 直接在“Have g++ follow the C++11 ISO C++ language standard [-std=c++11]” 选项上打勾 保存就 ...

  9. debian防火墙firestarter

    Firestarter是一个非常好用的防火墙图形化配置工具,作者和开发者是芬兰人. 首先肯定的说Firestarter防火墙是一款非常优秀的基于GUI图形用户界面下的,完全免费的自由软件,它为中小型L ...

  10. C++_快速排序(纯C版本)

    //比较大小 static int compare_int(const void *int1,const void *int2) { if(*(const int*)int1>*(const i ...