博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
快速排序算法(方式二)图解(窃)
阅读量:6999 次
发布时间:2019-06-27

本文共 1931 字,大约阅读时间需要 6 分钟。

hot3.png

图解快速排序

快速排序是冒泡排序的改进版,也是最好的一种内排序,在很多面试题中都会出现,也是作为程序员必须掌握的一种排序方法。

思想:1.在待排序的元素任取一个元素作为基准(通常选第一个元素,但最的选择方法是从待排序元素中随机选取一个作为基准),称为基准元素;

       2.将待排序的元素进行分区,比基准元素大的元素放在它的右边,比其小的放在它的左边;

       3.对左右两个分区重复以上步骤直到所有元素都是有序的。

所以我是把快速排序联想成东拆西补西拆东补一边拆一边补,直到所有元素达到有序状态。

下面再看看示图理解下吧:

6.对元素5两边的元素也重复以上操作,直到元素达到有序状态。

public class QuickSort {    public static void quickSort(int arr[],int _left,int _right){        int left = _left;        int right = _right;        int temp = 0;        if(left <= right){   //待排序的元素至少有两个的情况            temp = arr[left];  //待排序的第一个元素作为基准元素            while(left != right){   //从左右两边交替扫描,直到left = right                while(right > left && arr[right] >= temp)                       right --;        //从右往左扫描,找到第一个比基准元素小的元素                  arr[left] = arr[right];  //找到这种元素arr[right]后与arr[left]交换                while(left < right && arr[left] <= temp)                     left ++;         //从左往右扫描,找到第一个比基准元素大的元素                  arr[right] = arr[left];  //找到这种元素arr[left]后,与arr[right]交换            }            arr[right] = temp;    //基准元素归位            quickSort(arr,_left,left-1);  //对基准元素左边的元素进行递归排序            quickSort(arr, right+1,_right);  //对基准元素右边的进行递归排序        }            }    public static void main(String[] args) {        int array[] = {10,5,3,1,7,2,8};        System.out.println("排序之前:");        for(int element : array){            System.out.print(element+" ");        }                quickSort(array,0,array.length-1);        System.out.println("\n排序之后:");        for(int element : array){            System.out.print(element+" ");        }    }}
排序之前:10 5 3 1 7 2 8 排序之后:1 2 3 5 7 8 10

算法分析:1.当分区选取的基准元素为待排序元素中的最大或最小值时,为最坏的情况,时间复杂度和直接插入排序的一样,移动次数达到最大值

                  Cmax = 1+2+...+(n-1) = n*(n-1)/2 = O(n2) 此时最好时间复杂为O(n2) 

              2.当分区选取的基准元素为待排序元素中的"中值",为最好的情况,时间复杂度为O(nlog2n)。

              3.快速排序的空间复杂度为O(log2n). 

              4.当待排序元素类似[6,1,3,7,3]且基准元素为6时,经过分区,形成[1,3,3,6,7],两个3的相对位置发生了改变,所是快速排序是一种不稳定排序。

转载于:https://my.oschina.net/liddhome/blog/826744

你可能感兴趣的文章
在51系列中data,idata,xdata,pdata的区别
查看>>
quick-cocos2d-x游戏开发【8】——动画与动作
查看>>
【Deeplearning】关注书目
查看>>
spring mvc 注解示例
查看>>
【再见RMQ】NYOJ-119-士兵杀敌(三),区间内大小差值
查看>>
loadrunner中Run-time-Setting设置
查看>>
tomcat配置文件server.xml具体解释
查看>>
MVC模式简单介绍
查看>>
SSL连接建立过程分析(1)
查看>>
port与大全portClose方法
查看>>
不得不说的JavaScript异步加载
查看>>
美丽的数学家:如果您讨厌数学,这些其实都是人生故事
查看>>
Kettle 中转换(transformation)的执行过程
查看>>
读书笔记-互联网思维阅读10其中一本书《自由》
查看>>
11G新特性 -- ASM的兼容性
查看>>
Spark入门实战系列--5.Hive(上)--Hive介绍及部署
查看>>
猫学习IOS(四)UI半小时就搞定Tom猫
查看>>
在GitHub上管理项目
查看>>
tomcat设置web根目录
查看>>
CF 444B(DZY Loves FFT-时间复杂度)
查看>>