美文网首页
快速排序

快速排序

作者: eversay | 来源:发表于2021-03-09 01:04 被阅读0次

一、记录一种快速排序算法的思路

  • 基本思路:在一组数据中找出一个参考点的数据来做比较,然后将数据以参考点为准分成左右两部分,左边的是小于参考点的数据,右边是大于参考点的数据,分类结束后变成两组新的数据,对这两组数据分别循环重复该过程,如此直到每个部分都只有一个元素时即完成排序。

  • 基本步骤:

  1. 找参考点,给定一个范围为 i 到 j 的数组,在数组数据中找出参考点。将数据的左边第一个数(参考
    点在左)i 位置作为参考点数据赋值给单独的变量 key,然后从右边 j 开始,比较j位置的元素val[j]是否大于参考点数据key,若是,则将 j 减一左移,直到 i <= j 条件不满足退出,若不是,则交换 i 和 j 位置的数据。(从右边开始,将右边数据赋值给 i ,i 的第一个变量赋值到key正好又空缺一个位置可以填充数组,而不至于数组丢 失)
  2. 接下来判断左边 i 位置的数据是否小于参考点数据 key,若不是则赋值给 j 位置的数据,若是,则继续左移数据,直到 i <= j 条件不满足退出。
  3. i 等于 j 的时候,返回 j 位置的数据即是参考点的数据
  4. 循环重复以上1,2,3步骤,将每次得到的参考点数据带入基准点左边数组进行排列,然后再排列右边的数组。
    ……
  • 个人理解:
    快速排序是分治的一种算法,将数据分成各个部分来分别处理,每个部分处理好了,合并起来整个数据自然就有序了。在该快速排序中,其中分左右两个部分的算法是关键,可以取中间一个数据当参考点,判断大于的放一边,小于的放另外一边,至于数组长度坑位是有限的,所以必然是需要一个临时的变量来存放待交换的数据,这里面参考点数据可以起这个作用,一方面用来比较,一方面可以当空出来的那个坑位,用来当交换用的临时变量。如此每次交换都会移动这个位置,直到最后比较结束,将这个基准变量填回这个坑位,返回这个基准变量的位置,等待下一次处理。

  • 注意点:
    获取参考点时,条件判断不满足很容易造成死循环,无法退出。

    • a. 参考点做比较判断,待比较元素数值应当是右边大于等于或左边是小于等于参考点数值(升序排列)。
    • b. 左边做参考点,则从右边开始判断,右边参考点从左边开始
    • c. quick 排序函数本身,只有一个元素时要结束退出递归

算法示例:

int qartion(int arr[],int len,int lo,int hi)
{
    int res = 0;
    int key = arr[lo];
    int i = lo,j = hi;
    while(i < j)
    {
            while(arr[j] >= key && j > i)j--;
            if(j > i)
                arr[i] = arr[j];
            while(arr[i] <= key && i < j)i++;
            if(i < j) 
                arr[j] = arr[i];
    }
    arr[i] = key;
    res = i;
    return res;
}

void quick_sort(int arr[],int len,int lo,int hi)
{
    if(lo >= hi)return;
    int m = qartion(arr,len,lo,hi);
    quick_sort(arr,len,lo,m-1);
    quick_sort(arr,len,m+1,hi);
}

学习之余记录总结的笔记
个人理解,若有不对欢迎请指出

相关文章

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

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

  • 面试准备--排序

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

  • 排序

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

  • 算法笔记01-排序#2

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

  • PHP 实现快速排序

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

  • 快速排序的Python实现

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

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

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

  • 数组-快速排序

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

  • OC数据结构&算法

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

  • 要成功就做一百题-94

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

网友评论

      本文标题:快速排序

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