美文网首页
数据结构与算法-算法篇:排序—快速排序(六)

数据结构与算法-算法篇:排序—快速排序(六)

作者: 洒一地阳光_217d | 来源:发表于2020-09-28 10:49 被阅读0次

数据结构与算法系列文章:数据结构与算法目录

快速排序的核心思想也是分治法,分而治之。它的实现方式是每次从序列中选出一个基准值,其他数依次和基准值做比较,比基准值大的放右边,比基准值小的放左边(相同的数可以到任一边),然后再对左边和右边的两组数分别选出一个基准值,进行同样的比较移动,重复步骤,直到最后都变成单个元素,整个数组就成了有序的序列。

使用双边扫描:
随意抽取一个数作为基准值,然后从数组左右两边进行扫描,先从左往右找到一个大于基准值的元素,将下标指针记录下来,然后转到从右往左扫描,找到一个小于基准值的元素,交换这两个元素的位置,重复步骤,直到左右两个指针相遇,再将基准值与左侧最右边的元素交换。

实现:
/// <summary>
/// 快速排序
/// </summary>
/// <param name="arr"></param>
private void QuickSort(int[] arr)
{
    Sort(arr, 0, arr.Length - 1);
}

private void Sort(int[] arr, int startIndex, int endIndex)
{
    if (startIndex >= endIndex)
    {
        // 排序完毕
        return;
    }

    // 选个基准值,比基准值小的放左边,比基准值大的放右边
    int key = arr[startIndex];

    int left = startIndex;
    int right = endIndex;

    while (left < right)
    {
        // 从右往左找
        while (left < right && arr[right] >= key)
        {
            // 比基准值大,继续找
            right--;
        }
        // 找到比基准值小的,放左边
        arr[left] = arr[right];

        // 从左向右找
        while (left < right && arr[left] <= key)
        {
            // 比基准值小,继续找
            left++;
        }
        // 找到比基准值大的,放右边
        arr[right] = arr[left];
    }
    // 插入基准值
    arr[left] = key;

    // 从左向右依次排
    Sort(arr, startIndex, right - 1);
    // 从右向左依次排
    Sort(arr, left + 1, endIndex);
}

相关文章

  • 排序算法-堆排序

    参考: Java排序算法(五):堆排序 【算法与数据结构】图说堆排序 【数据结构】排序算法:希尔、归并、快速、堆排...

  • 算法与数据结构(六):堆排序

    title: 算法与数据结构(六):堆排序tags: [算法与数据结构, C语言, 堆排序]date: 2019-...

  • 排序算法6:快速排序

    数据结构与算法 快速排序为应用最多的排序算法,因为快速二字而闻名。快速排序和归并排序一样,采用的都是分治思想。 分...

  • 算法与数据结构路线图

    学习算法与数据结构,深刻理解计算机科学 排序算法:插入、冒泡、选择、希尔、快速、归并、堆排序、计数排序、桶排序、基...

  • (转)排序算法

    排序算法点这里 数据结构与算法——计数排序、桶排序、基数排序

  • 2019年5月份找工作面试知识点总结

    面试知识点 算法和数据结构 常用算法排序算法各种排序算法的时间复杂度,是否稳定内部排序快速排序 nlgn 不稳定冒...

  • Python 算法大全

    这个库涵盖了多种算法和数据结构的介绍,比如: 排序算法(冒泡排序、希尔排序、插入排序、桶排序、合并排序、快速排序、...

  • C语言:关于数据的几种排序算法

    数据结构的排序算法有很多种。其中,快速排序、希尔排序、堆排序、直接选择排序不是稳定的排序算法;基数排序、冒泡排序、...

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

    数据结构与算法——快速排序 快速排序,顾名思义,它速度很快,针对一般应用中各种不同的输入都要比其他排序算法快很多,...

  • java实现快速排序、归并排序、希尔排序、基数排序算法...

    快速排序算法 归并排序算法 希尔排序算法 基数排序算法

网友评论

      本文标题:数据结构与算法-算法篇:排序—快速排序(六)

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