美文网首页
快速排序(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://www.haomeiwen.com/subject/dmdpmktx.html