美文网首页
iOS 快速排序

iOS 快速排序

作者: 雪中夜归人 | 来源:发表于2019-10-12 11:14 被阅读0次

  快速排序(Quick Sort)是实际开发中经常选用的一种排序方式。其排序原理:取数组中的首个元素为轴点数据,小于轴点的放在轴点前边大于的放在轴点后边,分成的左右子数组重复此操作的过程。

// 返回轴点下标
- (NSInteger)sortArrayWithBegain:(NSInteger)begain end:(NSInteger)end
{
    end--;
    // 此处为了规避左右子数组不平衡的情况,将固定取数组第一个元素改为随机取数组中的某个值为轴点元素,一定程度规避了最差时间复杂度的出现
    NSInteger randomIndex = begain + arc4random() % (end - begain);
    id pivot = self.sortArray[randomIndex];
    self.sortArray[randomIndex] = self.sortArray[begain];
    self.sortArray[begain] = pivot;
    
    while (begain < end) {
        while (begain < end) {
            if ([self compareObjcet:pivot anotherObject:self.sortArray[end]]) {
                end--;
            } else {
                self.sortArray[begain++] = self.sortArray[end];
                break;
            }
        }
        while (begain < end) {
            if ([self compareObjcet:self.sortArray[begain] anotherObject:pivot]) {
                begain++;
            } else {
                self.sortArray[end--] = self.sortArray[begain];
                break;
            }
        }
    }
    self.sortArray[begain] = pivot;
    return begain;
}

根据轴点将数组分成左右两个子数组

- (void)sortArrayBegain:(NSInteger)begain end:(NSInteger)end
{
    if (end - begain < 2) {
        return;
    }
    NSInteger mid = [self sortArrayWithBegain:begain end:end];
    [self sortArrayBegain:0 end:mid];
    [self sortArrayBegain:mid + 1 end:end];
}

给出最初的排序数组

- (void)sort
{
    [self sortArrayBegain:0 end:self.sortArray.count];
}

总结:很显然这个排序算法也是递归调用的过程,其通式依然是T(n) = 2 * T(n/2) + O(n),因此时间复杂度为O(n*logn)级别。具体参看iOS 归并排序最后部分--递归式及复杂度

相关文章

  • iOS 中的冒泡、选择、快速、插入排序算法

    不喜勿喷, 不吝指教 冒泡排序 选择排序 插入排序 快速排序 参考链接:iOS 开发中常用的排序(冒泡、选择、快速...

  • iOS标准库中常用数据结构和算法之排序

    上一篇:iOS系统中的常用数据结构之链表 ?排序 排序是指将乱序数组变为有序排列的处理。iOS提供了快速排序、堆排...

  • 算法

    iOS冒泡排序、插入排序、选择排序、快速排序、二分查找用数组实现栈和队列专题:菲波那切数列与递归

  • iOS - 快速排序

    Demo_github 快速排序 快速排序(Quick Sort)是对冒泡排序的一种改进。通过一趟排序将要排序的数...

  • iOS快速排序

    时间复杂度:nlog(n)

  • iOS 快速排序

      快速排序(Quick Sort)是实际开发中经常选用的一种排序方式。其排序原理:取数组中的首个元素为轴点数据,...

  • iOS 快速排序

    首先我们看下为啥要使用快速排序,如:现在我们有一个数组,需要对里面的数据进行排序,使用最原始的双层for循环排序 ...

  • ios 快速排序

    - (void)viewDidLoad { [super viewDidLoad]; //初始化 创建数组...

  • iOS 快速排序

    核心代码 ///=================快速排序 - (void)sort { self.array...

  • 数组的排序

    系统提供的排序方法,我觉得应该是快速排序方法的封装 OC swift 还有其他排序的方法,可参考文章:iOS 数组...

网友评论

      本文标题:iOS 快速排序

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