简单排序算法时间空间复杂度分析及应用(3)-快速排序

来源:互联网 发布:软件自学网站大全 编辑:程序博客网 时间:2024/06/07 04:00

简单排序算法时间空间复杂度分析及应用(3)-快速排序

和之前的两种算法比较:

      1.快速算法适合在n值(排序规模比较大)较大的场景下使用,快速排序算法时间会少一点。

      2.冒泡排序和插入排序适合n值较小的场景下使用,如果待排序区并不是都杂乱无序,即有些区域是有序

 的,使用冒泡排序和插入排序比较好一点。

      3.快速排序适合用在次序分布随机的场景下应用。

    快速排序过程中涉及到的新概念是:确定区元。该算法运用分层递归的思想,每一个递归层都会确定两个确定区元,然后每个确定区元下面又会确定两个区元,直至一个区元或者没有区元。

确定区元:指的是多个区元之间已经确定关系的待确定区域,即在某个方向上(由左向右或由右向左),区元的所有数据都小于或这都大于后面其他区元的所有数据,但是这些区域中的数都是未确定节点,即没经过排序的。这些区域被称为确定区元。

                如下图所示



               

一般快速排序会把最后一个数据节点当作中间比较元素,这个元素插在两个确定区元的中间,然后区元内部再递归快速排序下去,

快速排序的图解:



快速排序java实现:

/* * 快速排序 quickSort * 快速排序时间复杂度nlog(n); * @param 输入true为增序列,false为降序 */public static void quickSort(boolean flag){int [] arr =  array;System.out.println(arr.length);quicksort(arr , 0 , arr.length - 1 , flag);}private static void quicksort(int[] arr, int i, int j , boolean flag) {// TODO Auto-generated method stubif(i >= j)return; int p = i , q = i , k ;for(  ; q < j ; ++ q){if((arr[q] < arr[j]&&flag)||(arr[q] > arr[j] && !flag)){ k = arr[q];arr[q] = arr[p];arr[p] = k;++p;}}//将中间比较元素放到连两个确定区元的中间,区元X:i至p-1。确定区元Y:p+1至jif(p != q){k = arr[q];arr[q] = arr[p];arr[p] = k;}//递归快速排序两个确定区元。quicksort(arr , i , p-1 , flag);quicksort(arr , p+1 , j , flag);}

下面几个文章等再分析几个排序算法后,会分析比较这些算法的不同。


0 0
原创粉丝点击