`
JasonShieh
  • 浏览: 527377 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Objective-C实现冒泡,选择,插入,快速排序算法

 
阅读更多
首先是header文件:
#import <Foundation/Foundation.h>

@interface Sort : NSObject{
    
}
//冒泡排序
-(void)bunbleSortWithArray:(NSArray *)aData;
//选择排序
-(void)selectSortWithArray:(NSArray *)aData;
//插入排序
-(void)insertSortWithArray:(NSArray *)aData;
//快速排序,对冒泡排序的一种改进
-(void)quickSortWithArray:(NSArray *)aData;
-(void)swapWithData:(NSMutableArray *)aData index1:(NSInteger)index1 index2:(NSInteger)index2;
@end

接着是实现:

#import "Sort.h"

@interface Sort()
-(void)quickSortWithArray:(NSArray *)aData left:(NSInteger)left right:(NSInteger)right;
@end

@implementation Sort

- (id)init
{
    self = [super init];
    if (self) {
        // Initialization code here.
    }
    
    return self;
}

-(void)bunbleSortWithArray:(NSArray *)aData{
    NSMutableArray *data = [[NSMutableArray alloc]initWithArray:aData];
    for (int i=0; i<[data count]-1; i++) {
        for (int j =0; j<[data count]-1-i; j++) {
            if ([data objectAtIndex:j] > [data objectAtIndex:j+1]) {
                [self swapWithData:data index1:j index2:j+1];
            }
        }
    }
    NSLog(@"冒泡排序后的结果:%@",[data description]);
}

-(void)selectSortWithArray:(NSArray *)aData{
    NSMutableArray *data = [[NSMutableArray alloc]initWithArray:aData];
    for (int i=0; i<[data count]-1; i++) {
        int m =i;
        for (int j =i+1; j<[data count]; j++) {
            if ([data objectAtIndex:j] < [data objectAtIndex:m]) {
                m = j;
            }
        }
        if (m != i) {
            [self swapWithData:data index1:m index2:i];
        }
    }
    NSLog(@"选择排序后的结果:%@",[data description]);
}

-(void)insertSortWithArray:(NSArray *)aData{
    NSMutableArray *data = [[NSMutableArray alloc]initWithArray:aData];
    for (int i = 1; i < [data count]; i++) {
        id tmp = [data objectAtIndex:i];
        int j = i-1;
        while (j != -1 && [data objectAtIndex:j] > tmp) {
            [data replaceObjectAtIndex:j+1 withObject:[data objectAtIndex:j]];
            j--;
        }
        [data replaceObjectAtIndex:j+1 withObject:tmp];
    }
    NSLog(@"插入排序后的结果:%@",[data description]);
}

-(void)quickSortWithArray:(NSArray *)aData{
    NSMutableArray *data = [[NSMutableArray alloc] initWithArray:aData];
    [self quickSortWithArray:data left:0 right:[aData count]-1];
    NSLog(@"快速排序后的结果:%@",[data description]);
    
}

-(void)quickSortWithArray:(NSMutableArray *)aData left:(NSInteger)left right:(NSInteger)right{
    if (right > left) {
        NSInteger i = left;
        NSInteger j = right + 1;
        while (true) {
            while (i+1 < [aData count] && [aData objectAtIndex:++i] < [aData objectAtIndex:left]) ;
            while (j-1 > -1 && [aData objectAtIndex:--j] > [aData objectAtIndex:left]) ;
            if (i >= j) {
                break;
            }
            [self swapWithData:aData index1:i index2:j];
        }
        [self swapWithData:aData index1:left index2:j];
        [self quickSortWithArray:aData left:left right:j-1];
        [self quickSortWithArray:aData left:j+1 right:right];
    }
}


//-(void)dealloc{
//}

-(void)swapWithData:(NSMutableArray *)aData index1:(NSInteger)index1 index2:(NSInteger)index2{
    NSNumber *tmp = [aData objectAtIndex:index1];
    [aData replaceObjectAtIndex:index1 withObject:[aData objectAtIndex:index2]];
    [aData replaceObjectAtIndex:index2 withObject:tmp];
}

@end

然后写main函数测试:
#import <Foundation/Foundation.h>
#import "Sort.h"

#define kSize 20
#define kMax 100

int main (int argc, const char * argv[])
{
    
    // insert code here...
    NSLog(@"Hello, World!");
    
    NSMutableArray *data = [[NSMutableArray alloc] initWithCapacity:kSize];
    
    for (int i =0;i<kSize;i++) {
        u_int32_t x = arc4random() % kMax;//0~kMax
        NSNumber *num = [[NSNumber alloc] initWithInt:x];
        [data addObject:num];
    }
    
    NSLog(@"排序前的数据:%@",[data description]);
    
    Sort *sort = [[Sort alloc] init];
    [sort bunbleSortWithArray:data];
    [sort selectSortWithArray:data];
    [sort insertSortWithArray:data];
    [sort quickSortWithArray:data];
    return 0;
}
分享到:
评论

相关推荐

    选择排序 冒泡排序 插入排序 快速排序 堆排序.zip

    本资源包"选择排序 冒泡排序 插入排序 快速排序 堆排序.zip"聚焦于五种经典的排序算法,包括选择排序、冒泡排序、插入排序、快速排序以及堆排序。这些算法的实现语言是Objective-C,这是一种强大的面向对象的编程...

    swift-EKAlgorithms-Objective-C中的一些众所周知的CS算法和数据结构

    1. **排序算法**:包括冒泡排序、选择排序、插入排序、快速排序、归并排序等。这些算法在处理大量数据时有着不同的性能特点,比如快速排序在大多数情况下表现优秀,而归并排序则保证了稳定性。 2. **搜索算法**:如...

    常用算法示例_Objective-C_C_下载.zip

    1. **排序算法**:包括快速排序、归并排序、插入排序、选择排序、冒泡排序等,这些都是基础但实用的算法,用于对数据进行有效排列。 2. **查找算法**:如二分查找、哈希查找等,它们在数据检索和定位中起着重要作用...

    swift-在Object-C中学习数据结构与算法之排序算法

    在Swift编程语言中,了解和...在"Play-With-Sort-OC-master"这个压缩包中,可能包含了这些排序算法的Objective-C实现,供开发者参考和学习。通过阅读和理解源代码,开发者可以更好地掌握这些经典排序算法的实现细节。

    IOS开发算法

    "IOS开发算法"这个Demo展示了Objective-C语言实现的三种基础排序算法:冒泡排序、插入排序和选择排序。这些算法是计算机科学的基础,也是每一位iOS开发者应该熟悉的数据结构和算法知识。 1. **冒泡排序**: 冒泡...

    Algorithms:使用 Objective C 进行排序和搜索的算法

    4. 快速排序:基于分治法的排序算法,选择一个“基准”元素,将数组分为两部分,一部分小于基准,另一部分大于基准,然后对这两部分递归进行快速排序。Objective-C实现时,可以使用递归函数。 5. 归并排序:也是...

    ios-排序.zip

    除了基本的数组排序,iOS开发者还需要了解各种排序算法,如冒泡排序、选择排序、插入排序、快速排序、归并排序等。这些算法在特定情况下可能会影响应用的性能。例如,快速排序通常比冒泡排序更快,但在处理小规模...

    HTML5与iOS交互实现的各种动态排序

    动态排序通常涉及到数组元素的重新排列,比如快速排序、冒泡排序、插入排序等。在HTML5中,我们可以通过JavaScript实现这些算法,并使用CSS3动画来呈现排序过程。例如,可以改变每个元素的透明度、大小或位置,模拟...

    swift-工程中会包含一些iOS面试中的算法和数据结构相关题目

    - 冒泡排序:简单的排序算法,通过重复遍历数组,交换相邻的错误顺序元素来逐步排序。 - 插入排序:适合小规模或基本有序的数组,通过将未排序元素逐个插入到已排序部分来完成排序。 - 二分查找:在已排序数组中...

    PublicAlgorithms:Most of the algorithm functions of iOS implementation---iOS 实现的大部分算法功能

    PublicAlgorithmsMost of the algorithm functions of iOS implementation---iOS 实现的大部分算法功能冒泡排序选择排序快速排序归并排序希尔排序基数排序堆排序直接插入排序二分法插入排序二分查找链表逆序字符串的...

    iOS常见算法以及应用知识点总结

    同时,算法的学习不仅仅局限于这两种,还有插入排序、选择排序、归并排序、堆排序等多种排序算法,以及搜索算法如二分查找、哈希表等,这些都是iOS开发者必备的知识。通过不断学习和实践,开发者能够更好地应对各种...

    AlgorithmsStudy:这里是一些常见算法实例

    Objective-C中,可以通过维护一个已排序部分和未排序部分的边界来实现选择排序,其时间复杂度同样是O(n^2)。 3. **数组移位**: 数组移位操作在编程中很常见,例如在插入或删除元素时。Objective-C中,可以使用`...

    iOS算法:iOS数据结构算法

    1. **排序算法**:如冒泡排序、插入排序、选择排序、快速排序、归并排序等。Objective-C提供了NSSortDescriptor进行数组排序。 2. **搜索算法**:包括线性搜索、二分搜索(适用于有序数组)。在Objective-C中,...

    c语言经典源程序案例

    此外,可能还包括一些著名的算法实现,如排序算法(冒泡排序、选择排序、插入排序、快速排序、归并排序等)、查找算法(线性查找、二分查找等)、图论问题、动态规划等。 在C语言的学习中,实践是至关重要的。通过...

    数据结构算法演示系统

    2. **算法**:算法是一系列解决问题的清晰指令,如排序算法(冒泡排序、快速排序、归并排序等)、搜索算法(深度优先搜索、广度优先搜索)、图算法(最短路径、最小生成树)等。通过类C或Delphi脚本,用户可以编写和...

    2020年腾讯面试笔试宝典.pdf

    **选择排序**:不稳定排序算法,其时间复杂度为O(n^2)。选择排序的基本思想是对记录序列进行n-1遍处理,每次将未排序部分的最小元素与该部分的第一个元素交换位置。 **快速排序**:不稳定排序算法,平均情况下时间...

    Pai xuDemo

    5. **冒泡排序/选择排序/插入排序**:这些基础排序算法在小规模数据或教学场景下使用较多,虽然效率较低,但易于理解。在字符串排序中,它们的原理同样适用,只是比较的是字符串而非整数。 6. **自定义排序**:在...

    ios 笔试题

    常见的排序算法有冒泡排序、选择排序、插入排序、快速排序等。这里展示冒泡排序的实现: ```objc void bubbleSort(int a[], int n) { for (int i = 0; i &lt; n - 1; i++) { for (int j = 0; j &lt; n - i - 1; j++) ...

    SortingAlgorithems:所有排序算法

    所有排序算法:选择排序、冒泡排序、插入排序、快速排序和堆排序 选择排序: 在这个排序中,我们将按顺序比较项目并找到最小的项目。 之后,我们将保留一个指针以在特定时间间隔检查最小元素的位置。 指针的值将取...

    顺丰科技2019秋招iOS开发工程师、GIS开发工程师客观题合集.docx

    #### 题目8:请指出堆排序、选择排序、冒泡排序、快速排序的时间复杂度 - **答案**:(a) - **解析**: - 堆排序的平均时间复杂度为O(n log n)。 - 选择排序的平均时间复杂度为O(n^2)。 - 冒泡排序的平均时间...

Global site tag (gtag.js) - Google Analytics