常用算法OC实现

作者: xiao小马哥 | 来源:发表于2017-08-10 18:18 被阅读616次
  1. 希尔排序
- (void)shellSort:(NSMutableArray *)array {

NSInteger i,j,gap;
NSInteger n = array.count;
for (gap = n/2; gap > 0; gap/=2) {
    for (i=gap; i<n; i++) {
        
        for (j = i-gap; j>=0 && [array[j] integerValue] > [array[j +gap] integerValue]; j -= gap) {
            [array exchangeObjectAtIndex:j withObjectAtIndex:j+gap];
        }
    }
}
}
  1. 快速排序
- (void)qSort:(NSMutableArray *)array lowIndex:(NSInteger)low highIndex:(NSInteger)high{

NSInteger pivot;
while (low < high) {
    pivot = [self partition:array lowIndex:low highIndex:high];
    [self qSort:array lowIndex:low highIndex:pivot -1];
    low = pivot +1;
}

}

- (NSInteger)partition:(NSMutableArray *)array lowIndex:(NSInteger)low highIndex:(NSInteger)high{
NSInteger pivotKey;
pivotKey = [array[low] integerValue];
while (low < high) {
    while (low < high && [array[high] integerValue] >= pivotKey) {
        high -- ;
    }
    array[low] = array[high];
    while (low < high && [array[low] integerValue] <= pivotKey) {
        low ++ ;
    }
    array[high] = array[low];

}
    array[low] = @(pivotKey);
return low;
}
  1. 直接插入排序
- (void)insertSort:(NSMutableArray *)array{
NSInteger i,j,temp;
NSInteger n = array.count;
for (i = 1; i<n; i++) {
    if ([array[i] integerValue] < [array[i-1] integerValue]) {
        temp = [array[i] integerValue];
        for (j = i-1; j>=0&&[array[j] integerValue] > temp; j--) {
            array[j +1] = array[j];
        }
        array[j+1] = @(temp);
    }
}
}
  1. 简单选择排序
- (void)selectedSort:(NSMutableArray *)array{

NSInteger i,j,min;
NSInteger n = array.count;
for (i=0; i<n; i++) {
    min = i;
    for (j = i+1; j<n; j++) {
        if ([array[j] integerValue]< [array[min] integerValue]) {
            min = j;
        }
    }
    if (min != i) {
        [array exchangeObjectAtIndex:i withObjectAtIndex:min];
    }
}
}
  1. 冒泡排序
- (void)bubbleSort:(NSMutableArray *)array{
NSInteger i,j;
NSInteger n = array.count;
BOOL flag = YES;
for (i = 0; i<n&&flag; i++) {
    flag = NO;
    for (j = n -1; j>i; j--) {
        if ([array[j] integerValue] < [array[j-1] integerValue]) {
            [array exchangeObjectAtIndex:j withObjectAtIndex:j-1];
            flag = YES;
        }
    }
}
}

相关文章

  • 常用算法OC实现

    希尔排序 快速排序 直接插入排序 简单选择排序 冒泡排序

  • OC 中实现常用的算法

    #在OC中实现常用的算法(冒泡,选择,快速,插入) ## 1.冒泡排序 - (void)viewDidLoad {...

  • 常用的算法(OC实现)

    记录一下常用的算法, 方便以后复习或者查阅, 有的还需要优化 1.冒泡算法 主要思路就是从数组的最后面的元素开始比...

  • [iOS基础]OC常用算法实现

    希尔排序 快速排序 直接插入排序 简单选择排序 冒泡排序

  • 关于oc中遍历的效率算法研究

    关于oc中遍历的效率算法研究 在oc中,编写程序最常用的的算法莫过于对算法的遍历,下面我们来探索一下最常用的几种算...

  • OC常用算法

    排序算法 冒泡排序 选择排序 快速排序 插入 二分查找

  • iOS开发 算法_数据结构

    前言:本文主要是对常用的数据结构和算法OC版本实现。 一、数据结构(Structures)1、复杂度。2、动态数组...

  • KMP字符串查找算法

    关于 oc NSString 的 rangeOfString方法实现算法。 个人想法:(简单匹配算法) 例如: 有...

  • 几种常用的排序算法,OC实现

    1、冒泡排序原理是:比较相邻的元素,如果第一个比第二个大,就交换他们两个。对每一个相邻元素作同样的工作,从开始第一...

  • 常用排序算法OC语言实现

    冒泡排序: 选择排序 直接插入排序 快速排序

网友评论

    本文标题:常用算法OC实现

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