大张老师帮你快速理解程序经典算法:快速排序算法

Posted Oracle学习中心

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大张老师帮你快速理解程序经典算法:快速排序算法相关的知识,希望对你有一定的参考价值。


今天大张老师帮你快速理解快速排序算法,这也是在实际中最常用的一种排序算法,速度快,效率高。就像名字一样,快速排序是最优秀的一种排序算法。


大张老师帮你快速理解程序经典算法:快速排序算法


一、设计思想

对一组无序的数组进行排序的时候,选其中一个数组元素(一般为中间元素)作为参照,把比它小的元素放到它的左边,比它大的元素放在右边形成2个子数组。再以此方法对2个子数组递归排序,直至最后完成整个数组的排序

例如有数组:{5, 4 ,9 ,7 ,6 ,2 ,1 ,3 , 8 , -1


大张老师帮你快速理解程序经典算法:快速排序算法

大张老师帮你快速理解程序经典算法:快速排序算法

大张老师帮你快速理解程序经典算法:快速排序算法

大张老师帮你快速理解程序经典算法:快速排序算法

大张老师帮你快速理解程序经典算法:快速排序算法


大张老师帮你快速理解程序经典算法:快速排序算法

大张老师帮你快速理解程序经典算法:快速排序算法



代码实现(C语言):

#include"stdio.h"

#include"stdlib.h"

inta[10]={5,4,9,7,6,2,1,3,8,-1};

 

voidquickSort(inti,intj){

   intm,n,temp;

   intk;

   m=i;

   n=j;

   k=a[(i+j)/2];

   while(m<=n){

      //从左到右找比k大的元素

      while(a[m]<k&&m<j)m++;

      //从右到左找比k小的元素

      while(a[n]>k&&n>i)n--;

      //若找到且满足条件,则交换

      if(m<=n){

          temp=a[m];

          a[m]=a[n];

          a[n]=temp;

          m++;

          n--;

      }

 

   }

   if(m<j)quickSort(m,j);

   if(n>i)quickSort(i,n);

}


intmain()

{

    /**

   inta[6]={1,3,6,8,12,88};

   intn=binarySearch(a,6,6);

   printf("%d",n);

   */

    quickSort(0,9);

    for(inti=0;i<=9;i++){

       printf("\t%d",a[i]);

    }

 

//////////////////////////

    return0;

}



往期精彩图文:







以上是关于大张老师帮你快速理解程序经典算法:快速排序算法的主要内容,如果未能解决你的问题,请参考以下文章

面试必备排序算法 --快速排序

经典算法快速排序算法

十大经典排序算法总结(快速排序)

白话经典算法系列之六 快速排序 快速搞定

经典算法复习快速排序的应用

程序员必须要掌握的十大经典算法