05-快速排序(python、oc)

  • 最优时间复杂度:O(nlogn)
  • 最坏时间复杂度:O(n2)
  • 稳定性:不稳定
python
# coding:utf-8

def quick_sort(alist, first, last):
    """快速排序"""
    if first > last:
        return

    mid_value = alist[first]
    low = first
    high = last

    while high > low:
        while high > low and alist[high] >= mid_value:
            high -= 1
        alist[low] = alist[high]

        while high > low and alist[low] < mid_value:
            low += 1
        alist[high] = alist[low]
    alist[low] = mid_value

    quick_sort(alist, first, low - 1)
    quick_sort(alist, low + 1, last)

if __name__ == "__main__":
    li = [54, 26, 93, 17, 77, 31, 44, 55, 20]
    print(li)
    quick_sort(li, 0, len(li)-1)
    print(li)

objective-c

/**
 快速排序
 */
- (void)quick_sort:(NSMutableArray *)arr first:(NSInteger)first last:(NSInteger)last
{
    if (first > last) {
        return;
    }
    NSInteger low = first;
    NSInteger high = last;
    NSNumber *mid_value = arr[first];
    
    while (high > low) {
        while (high > low && arr[high] >= mid_value) {
            high--;
        }
        arr[low] = arr[high];
        
        while (high > low && arr[low] < mid_value) {
            low++;
        }
        arr[high] = arr[low];
    }
    arr[high] = mid_value;
    
    [self quick_sort:arr first:first last:high - 1];
    
    [self quick_sort:arr first:high + 1 last:last];
}
示例图
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 排序算法 冒泡排序 选择排序 插入排序 快速排序(最常见) 希尔排序 归并排序 源码:Sorting 冒泡排序 冒...
    廖少少阅读 2,743评论 12 101
  • 文章来源:数据结构与算法(Python) 排序与搜索排序算法(英语:Sorting algorithm)是一种能将...
    一只写程序的猿阅读 738评论 0 7
  • 合集 插入排序 1.直接插入排序 思想:每次将一个待排序的数据按照其数值大小插入到前面已经排序好的数据中的适当位置...
    deffing阅读 412评论 0 0
  • goleo阅读 200评论 0 0
  • 题外话: 看源码的工具:lambda-view【基于nodejs环境】。我感觉之所以好用是因为可以直接在浏...
    狂澜1991阅读 510评论 0 2