iOS 快速排序

  快速排序(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 归并排序最后部分--递归式及复杂度

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Demo_github 快速排序 快速排序(Quick Sort)是对冒泡排序的一种改进。通过一趟排序将要排序的数...
    SkyMing一C阅读 5,819评论 2 6
  • 1 初级排序算法 排序算法关注的主要是重新排列数组元素,其中每个元素都有一个主键。排序算法是将所有元素主键按某种方...
    深度沉迷学习阅读 5,319评论 0 1
  • 一些概念 数据结构就是研究数据的逻辑结构和物理结构以及它们之间相互关系,并对这种结构定义相应的运算,而且确保经过这...
    Winterfell_Z阅读 11,318评论 0 13
  • 归并排序和快速排序都用到了分治思想,非常巧妙。我们可以借鉴这个思想,来解决非排序的问题。 归并排序 归并排序的核心...
    被吹落的风阅读 5,126评论 0 3
  • 十大基础排序算法。 Basic-Sorting-Algorithm 关于十大基本排序算法的整理。 十大排序算法分别...
    一剑孤城阅读 7,699评论 1 6