美文网首页
快速排序(OC和C语言)

快速排序(OC和C语言)

作者: Queen_BJ | 来源:发表于2020-10-23 11:37 被阅读0次

通俗易懂的快速排序

原理分析(从小到大):
  1. 首先取出一个key,一般取第一个元素
  2. 从后往前遍历,如果数组中的数据小于了key,那么就将从前往后未比较过的第一个位置即fisrt位置替换为该数据
  3. 然后从前往后遍历,如果数组中的数据大于了key,那么就将从后往前的第一个比较过数据位置替换
  4. 直到左右两边的位置重合,说明key就找到了正确的位置,每次循环就能找到一个数的正确位置
  5. 然后将key左右两边的数据分为两组,递归调用自己。

OC语言


- (void)viewDidLoad {
    [super viewDidLoad];

   NSLog(@"快速%@",[self quickSortWithArray:mutArr.copy]);
}

- (NSArray *)quickSortWithArray:(NSArray *)array {
    if (!array) {
        return @[];
    }
    if (array.count == 0 || array.count == 1) {
        return array;
    }
   
    NSInteger baseNumberIndex = random() % array.count;
    NSLog(@"基准数是%ld",baseNumberIndex);
    
    NSNumber *baseNumber = array[baseNumberIndex];
    NSMutableArray *unsortedArray = [array mutableCopy];
    // 移除基准数
    [unsortedArray removeObjectAtIndex:baseNumberIndex];
    NSMutableArray *leftArray = [NSMutableArray array];
    NSMutableArray *rightArray = [NSMutableArray array];
    
    for (NSNumber *curNumber in unsortedArray) {
        if (curNumber.integerValue < baseNumber.integerValue) {
            [leftArray addObject:curNumber];
        } else {
            [rightArray addObject:curNumber];
        }
    }
    
    NSMutableArray *sortedArray = [NSMutableArray array];
    [sortedArray addObjectsFromArray:[self quickSortWithArray:[leftArray copy]]];
    [sortedArray addObject:baseNumber];
    [sortedArray addObjectsFromArray:[self quickSortWithArray:[rightArray copy]]];
    
    return sortedArray;
    
}

 快速(
    1,
    7,
    10,
    15,
    37,
    90
)

C语言

#include <stdio.h>
void quickSort(int arr[], int low, int high);

int main(int argc, const char * argv[]) {
    // insert code here...
    printf("Hello, World!\n");
    
    int i;
    int a[10] = {3, 1, 11, 5, 8, 2, 0, 9, 13, 81};

    for(i = 0; i < 10; i++)
        printf("%d ", a[i]);
    printf("\n");

    quickSort(a, 0, 9);

    for(i = 0; i < 10; i++)
    printf("%d ", a[i]);
    printf("\n");
 
    return 0;
}

void quickSort(int arr[], int low, int high)
{
    int first = low;
    int last  = high;
    int key = arr[first];
    if(low >= high)
        return;
    while(first < last)
    {
        while(first < last && arr[last] > key)
        {
            last--;
        }
        arr[first] = arr[last];

        while(first < last && arr[first] < key)
        {
            first++;
        }
        arr[last] = arr[first];
    }
   //  直到first=last,说明这个位置是基准数据的正确索引位置
    arr[first] = key;

    quickSort(arr, low, first-1);
    quickSort(arr, first+1, high);
}

Hello, World!
3 1 11 5 8 2 0 9 13 81 
0 1 2 3 5 8 9 11 13 81 

参考一

参考二

相关文章

  • 快速排序(OC和C语言)

    通俗易懂的快速排序[https://blog.csdn.net/vayne_xiao/article/detail...

  • C语言中的指针与数组

    C语言中的指针与数组 @(C语言)[排序算法, 快速排序, C实现] 引言 相信指针与数组是不少同学在初学C语言时...

  • 冒泡排序(OC和C语言)

    【冒泡排序】: 相邻元素两两比较,比较完一趟,最值出现在末尾 第1趟:依次比较相邻的两个数,不断交换(小数放前,...

  • 排序算法

    冒泡排序 PHP OC 快速排序

  • OC—面向对象

    1.OC: Object- C ,面向对象的语言 2、OC和C的区别 <1> oc是 c的超集 ,oc是在c语言的...

  • 总结:八天学会OC语言(上)

    day1 OC语言day01-01OC的简介(附C语言知识点回顾)OC语言day01-02C和OC的对比OC语言d...

  • 排序算法

    快速排序:顾名思义就是快,c语言底层实现的排序算法主要就是用的快速排序。快速排序,最好时间复杂度是nlogn,最坏...

  • Objective-C概述

    OC概述 • Objective-C简称OC,OC是C语言的扩充,并且OC是iOS和OS X操作系统的编程语言...

  • 快速排序 - C语言

    啥是快排 快排就是选定一个基准元素pirot,经过一趟排序后,使得pirot前面的元素都比它小,pirot后面的元...

  • 快速排序(C语言)

    算法原理 快速排序是目前在实践中非常高效的一种排序算法,它不是稳定的排序算法,平均时间复杂度为O(nlogn),最...

网友评论

      本文标题:快速排序(OC和C语言)

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