美文网首页
快速排序

快速排序

作者: foolish_hungry | 来源:发表于2020-06-26 08:04 被阅读0次

思想:
选一个基准值, 将大于它的放右边, 小于它的放左边。找到该基准值的下标, 然后继续递归调用。

代码实现

// 快速排序
void quickSort(int a[], int n) {
    if (n <= 1) {
        return;
    }
    quickSort_c(a, 0, n - 1);
    
    for (int i = 0; i < n; i++) {
        NSLog(@"%d", a[i]);
    }
}

// 递归函数
void quickSort_c(int a[], int left, int right) {
    // 递归终止条件
    if (left >= right) {
        return;
    }
    // 找到分区下标
    int q = partionSection1(a, left, right);
    // 递归调用
    quickSort_c(a, left, q - 1);
    quickSort_c(a, q + 1, right);
}

找到基准值的下标
分区实现一

int partionSection1(int a[], int left, int right) {
    int i, j, pivot;
    i = left;
    // 取一个标注数, 将小于它的放左边, 大于它的放右边
    pivot = a[right];
    // 利用选择排序思想
    for (j = left; j <= right - 1; j++) {
        if (a[j] < pivot) {
            int temp = a[j];
            a[j] = a[i];
            a[i] = temp;
            i = i + 1;
        }
    }
    int tempR = a[i];
    a[i] = a[right];
    a[right] = tempR;
    return i;
}

分区实现二

int partionSection2(int a[], int left, int right) {
    int i = left;
    int j = right;
    int key = a[left]; // 基准值
    while (i < j) {
        while (i < j && a[j] >= key) {
            j--;  // 左移
        }
        a[i] = a[j];
        while (i < j && a[i] <= key) {
            i++;  // 右移
        }
        a[j] = a[i];
    }
    a[i] = key;
    return i;
}

使用

int a[] = {4, 13, 2, 1, 7, 9, 10, 8, 3, 6};
    int num = sizeof(a) / sizeof(int);
    quickSort(a, num);

💚细品分区一和分区二的实现

相关文章

  • 七大排序算法之快速排序

    七大排序算法之快速排序 @(算法笔记)[排序算法, 快速排序, C++实现] [TOC] 快速排序的介绍: 快速排...

  • 面试准备--排序

    堆排序 快速排序(simple) 快速排序(regular) 归并排序 Shell排序 插入排序 选择排序 冒泡排序

  • 排序

    插入排序 选择排序 冒泡排序 归并排序 快速排序* 三路快速排序

  • 算法笔记01-排序#2

    快速排序敢叫快速排序,那它一定得快。 快速排序 概述 快速排序也是分治排序的典型,它快,而且是原地排序。不过,要防...

  • PHP 实现快速排序

    导语 这篇了解下快速排序。 快速排序 快速排序(英语:Quicksort),又称划分交换排序(partition-...

  • 快速排序的Python实现

    目录 快速排序的介绍 快速排序的Python实现 快速排序的介绍 快速排序(quick sort)的采用了分治的策...

  • 数据结构与算法 快速排序

    起因:快速排序,又称分区交换排序,简称快排,之前没有了解过,抽空学习一下。 快速排序 1 快速排序 快速排序的定义...

  • 数组-快速排序

    采用快速方式对数组进行排序 快速排序百科:快速排序(Quicksort)是对冒泡排序算法的一种改进.快速排序是通过...

  • OC数据结构&算法

    更多整理资料尽在?一平米小站 目录 选择排序 冒泡排序 插入排序 快速排序 双路快速排序 三路快速排序 堆排序 选...

  • 要成功就做一百题-94

    题目名称 今天来几个排序,都是经典题目,包括带拆分的快速排序,堆排序,归并排序。 描述 快速排序快速排序核心就是分...

网友评论

      本文标题:快速排序

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