美文网首页
基础算法一

基础算法一

作者: Bonew01 | 来源:发表于2022-08-01 20:54 被阅读0次

/*

相关术语解释:

稳定:如果 a 原本在 b 前面,而 a=b,排序之后,a 仍然在 b 的前面

不稳定:不满足稳定定义

内排序(In-place):所有排序操作都在内存中完成

外排序(Out-place):由于数据太大,因此把数据放在磁盘中,而排序通过磁盘和内存的数据传输才能进行。

时间复杂度:一个算法执行所耗费的时间

空间复杂度:运行完一个程序所需内存的大小

n:数据规模

k:「桶」的个数

In-place:不占用额外内存

Out-place:占用额外内存

*/

/*

常用排序算法总结对比

排序算法    平均时间复杂度    最好情况    最坏情况    空间复杂度    排序方式    稳定性

冒泡排序    O(n2)          O(n)      O(n2)      O(1)      In-place    稳定

选择排序    O(n2)          O(n2)    O(n2)      O(1)      In-place    不稳定

插入排序    O(n2)            O(n)    O(n2)      O(1)      In-place    稳定

希尔排序    O(n log n)  O(n log2 n)  O(n log2 n)  O(1)    In-place    不稳定

归并排序    O(n log n)    O(n log n)  O(n log n)  O(n)    Out-place    稳定

快速排序    O(n log n)    O(n log n)  O(n2)    O(log n)  In-place    不稳定

堆排序    O(n log n)    O(n log n)    O(n log n)  O(1)    In-place    不稳定

计数排序    O(n + k)    O(n + k)      O(n + k)    O(k)      Out-place    稳定

桶排序    O(n + k)      O(n + k)      O(n2)      O(n + k)  Out-place    稳定

基数排序    O(n x k)    O(n x k)      O(n x k)    O(n + k)  Out-place    稳定

*/

///冒泡

///平均时间复杂度 O(n^2),最好情况O(1), 空间复杂度O(1),稳定排序,排序方式:in-place

-(NSArray*)bubbleFunction:(NSMutableArray*)waitingToSort{

    for(inti =0; i < waitingToSort.count; i++) {

        for(intj =0; j < waitingToSort.count- i -1; j++) {

            NSString*temp = waitingToSort[j+1] ;

            if([waitingToSort[j]intValue] > [waitingToSort[j+1]intValue]) {

                waitingToSort[j+1] = waitingToSort[j];

                waitingToSort[j] = temp;

            }

        }

    }

    returnwaitingToSort;

}

///选择排序

///选择排序为啥不是稳定性排序呢,举个例子:数组 6、7、6、2、8,在对其进行第一遍循环的时候,会将第一个位置的6与后面的2进行交换。此时,就已经将两个6的相对前后位置改变了。因此选择排序不是稳定性排序算法。

-(NSArray*)chooseAnExampleFuction:(NSMutableArray*)waitingToSort{

    for(inti =0; i < waitingToSort.count; i++) {

        NSString*temp ;

        NSIntegerminIdex =0;

        for(intj = i ; j< waitingToSort.count-1; j++) {

            minIdex = i;

            if([waitingToSort[j+1]intValue] < [waitingToSort[j]intValue]) {

                minIdex = j;

            }

        }

        temp = waitingToSort[minIdex];

        waitingToSort[minIdex] = waitingToSort[i];

        waitingToSort[i] = temp;

    }

    returnwaitingToSort;

}

/// 插入排序

-(NSArray*)insertionSortFuction:(NSMutableArray*)waitingToSort{

    for(inti =1; i

        int  preIndex = i -1;

        NSString*current = waitingToSort[i];

        while(preIndex>=0&& [waitingToSort[preIndex]intValue]>[currentintValue]) {

            waitingToSort[preIndex+1] = waitingToSort[preIndex];

            preIndex--;

        }

        waitingToSort[preIndex+1] = current;

    }

    returnwaitingToSort;;

}

//希尔排序

/*1. 算法步骤

选择一个增量序列 t1,t2,……,tk,其中 ti > tj, tk = 1;

按增量序列个数 k,对序列进行 k 趟排序;

每趟排序,根据对应的增量 ti,将待排序列分割成若干长度为 m 的子序列,分别对各子表进行直接插入排序。仅增量因子为 1 时,整个序列作为一个表来处理,表长度即为整个序列的长度。

 */

-(NSArray*)hillSortFuction:(NSMutableArray*)waitingToSort{

    intgap =1;

    NSString*temp;

    NSIntegerlen = waitingToSort.count;

    while(gap

        gap = gap*3+1;

    }

    for( ; gap >0; gap = (gap/3)) {

        for(inti = gap; i < len; i++) {

            temp  = waitingToSort[i];

            for(intj = i-gap ; j>0&&[waitingToSort[j]intValue] > [tempintValue]

                 ; j -= gap) {

                waitingToSort[j+gap] = waitingToSort[j];

                waitingToSort[j] = temp ;

            }

        }

    }

    returnwaitingToSort;

}

相关文章

  • 程序员算法基础——贪心算法

    程序员算法基础——贪心算法 程序员算法基础——贪心算法

  • 2018-04-12GC垃圾回收机制

    最基础的收集算法 —— 标记/清除算法 之所以说标记/清除算法是几种GC算法中最基础的算法,是因为后续的收集...

  • 异步社区本周预售新书

    《算法详解(卷1)——算法基础》 Tim Roughgarden著 算法详解系列图书共有4卷,本书是第一卷——基础...

  • JVM垃圾回收算法

    Java基础:JVM垃圾回收算法 [toc] 参考:Java基础:JVM垃圾回收算法图解JVM垃圾回收算法 总结:...

  • 程序员算法基础——动态规划

    程序员算法基础——动态规划 程序员算法基础——动态规划

  • 人工智能技术文章list

    理论基础部分: 人工智能基数算法简介 人工智能基础算法简介2 人工智能基础算法总结 TensorFlow 入门 T...

  • 算法基础--基础算法

    算法基础--基础算法 前言:学校学完数据结构与算法后,感觉自己什么都没学到,唯一就知道好像有那么个东西,别说代码实...

  • 算法

    一.算法基础--算法的特性 二.算法基础--算法的复杂度 三.顺序查找和二分查找 顺序查找 二分查找(前提是有序的...

  • 给我巨大影响的技术书籍

    算法《算法概论》《算法设计与分析基础》 Anany Levitin《算法引论》Udi Manber《算法导论》《什...

  • 程序员进阶之算法练习(三十)附基础教程

    前言 BAT常见的算法面试题解析:程序员算法基础——动态规划程序员算法基础——贪心算法工作闲暇也会有在线分享,算法...

网友评论

      本文标题:基础算法一

      本文链接:https://www.haomeiwen.com/subject/ocarwrtx.html