快速排序法(QuickSort)——交换类排序法(java实现)

来源:互联网 发布:王晨芳 网络黄金 编辑:程序博客网 时间:2024/05/21 22:38

快速排序法(Quicksort)思想与java实现

快速排序法是一种分治排序的算法,通过两个元素的交换来消除线性表中的多个逆序,将数组有计划的分为两个部分,然后再分别对两个部分进行递归进行排序。

Quicksort的基本思想如下

从线性表选取一个基准元素Key(通常选取第一个元素),在线性表两段利用指针遍历元素对key进行比较交换。从而使得key左边的元素小于等于key,key右边的元素大于Key。把key左右的元素看作两个子表,利用递归思想对子表采用上述方法进行递归,从而获得原线性表的有序列表。Quicksort的最坏时间复杂度为O(n²),最坏情况下的比较次数为n(n-1)/2。

与冒泡排序(Bubblesort)的比较

Bubblesort在扫描过程中只对相邻的两个元素进行比较,也就是说在互换两个相邻元素时只能消除一个逆序。如果通过两个非相邻元素的交换,便能够消除线性表中的多个逆序,便会大大加快排序的速度。Bubblesort的最坏时间复杂度同为O(n²),最坏情况下的比较次数为n(n-1)/2。但平均复杂度Bubblesort为O(n²),Quicksort为O(n*logn),以2为底。

快速排序法的Java实现

public class QuickSort{    public static void main(String[] args){        int arr[] = {6,5,7,2,9,10,3};        sort(arr,0,arr.length-1);        pt(arr);    }    public static void pt(int []arr){        for(int a:arr)  //遍历数组进行打印            System.out.print(a+"  ");        System.out.println();    }    public static int  quicksort(int arr[],int a,int b){        int key = arr[a];  //设置基准元素。        int p1 = a;  //设置左指针        int p2 = b;  //设置右指针        while(p1<p2){            while(p1<p2 && arr[p2] >= key)  //从右边开始找小于key的元素,找到则停止进行交换。                p2--;            arr[p1] = arr[p2];  //改变目标元素的位置。            while(p1<p2 && arr[p1] <= key)  //同理,从左边开始找大于key的元素。                p1++;            arr[p2] = arr[p1];         }        arr[p1] = key;  //完成基准元素位置的设定,此时基准元素为中位元素。        return p1;    }    public static void sort(int arr[],int a,int b){  //递归        if(a<b){  //限制递归次数,防止无限递归。            int mid = quicksort(arr,a,b);            sort(arr,a,mid-1);            sort(arr,mid+1,b);        }    }}//道力之限,愿力所破。

上述quicksort函数详解
这个视频中老师对快速排序法思想的讲解还是不错的,但是代码不够简洁。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 摩羯和金牛吵架怎么办 窗户对着大烟囱怎么办 送钱给老师不收怎么办 上古卷轴5杀人了怎么办 嘴唇上长白色泡怎么办 下嘴唇老是起皮怎么办 孩子怕黑胆子小怎么办 小孩不吃饭怎么办偏瘦 我21岁现在缺钱怎么办 斗鱼直播卡顿怎么办 斗鱼怎么办卡怎么设置 无线网不能用了怎么办 率土之滨流浪后怎么办 率土之滨围洛阳怎么办 率土之滨没资源怎么办 竞彩改期的比赛怎么办 变性人老了会怎么办 冰箱放阳台直晒怎么办 喝了冰牛奶胃痛怎么办 空腹喝咖啡胃疼怎么办 空腹吃柿子胃疼怎么办 mac重启卡住了怎么办 快玩下载速度慢怎么办 微信消息不提示怎么办 车被物业锁了怎么办 去香港办的团签怎么办 香港个人签证g签怎么办 诛仙3挂机掉线怎么办 大神f2开不了机怎么办 昆仑账号忘记了怎么办 三星手机wifi信号弱怎么办 6个月的宝宝缺钙怎么办 半岁宝宝坐不稳怎么办 你宝宝老不睡觉怎么办 三岁宝宝摸咪咪怎么办 宝宝很困又不睡怎么办 两岁宝宝摸咪咪怎么办 失眠怎么办如何快速睡眠小偏方 9岁儿童睡不着觉怎么办 2岁儿童睡不着觉怎么办 多梦头晕没精神怎么办