博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
排序算法——快排思想
阅读量:6435 次
发布时间:2019-06-23

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

快速排序

1、思想

  快速排序将一个数组分成两个数组,再对两个数组独立排序,是个递归算法。

  首先随机选出一个切分元素temp(一般为这个数组的第一个元素),将小于temp的数放在temp的左边,将大于temp的数放在temp的右边。

  快排和堆排序很像,他们都是将一个数组分成两个子数组,都属于递归算法。但是不同之处在于:快排空间复杂度为o(1),而堆排为o(n),

快排是原地排序,只需要一个很小的辅助栈,时间复杂度为NlogN。

2、代码实现(java)

public class Quick {

    
    public static void sort(int[] a,int lo,int hi) {
        if(hi<=lo) return;
        //切分
        int j = partition(a,lo,hi);
        sort(a,lo,j-1);
        sort(a,j+1,hi);
        
    }
    //a[j]就是那个切分元素,从数组的左端开始向右扫描直到找到一个大于等于它的元素
    //再从数组的右端开始向左扫描直到找到一个小于等于它的元素,将这两个元素交换位置。
    public static int partition(int[] a,int lo,int hi) {
        //左右扫描数组
        int j = lo;
        int i = hi+1;;
        int v = a[lo];
        while(true) {
            while(v>=a[++j]){
                if(j==hi) break;
                //j++;
            }
            while(v<=a[--i]) {
                if(i==lo) break;
                //i--;
            }
            if(j>=i) {
                break;
            }
            int t = a[i];
            a[i] = a[j];
            a[j] = t;
        }
        a[lo] = a[j];
        a[j] = v;
        return j;
    }
    public static void main(String[] args) {
        int[] a = {49,78,23,34,67,45,73,90,120,12,20,9,5};
        int lo = 0;
        int hi = a.length-1;
        sort(a,lo,hi);
        for(int i=0;i<a.length;i++) {
            System.out.print(a[i]+" ");
        }
    }
}

转载于:https://www.cnblogs.com/shuqicui/p/day3.html

你可能感兴趣的文章
003# ADempiere系统简介(二)
查看>>
利用 squid 反向代理提高网站性能
查看>>
协变&逆变
查看>>
glide 与 SubsamplingScaleImageView 结合使用
查看>>
前嗅ForeSpider教程:采集图片/视频/资源文件
查看>>
Linux下find参数-mtime n,-n,+n详解
查看>>
oracle数据库创建用户方法
查看>>
生成原始的依赖jar包运行的jar的执行命令
查看>>
zabbix agentd windows安装
查看>>
Hadoop基础入门学习笔记(基本概念)
查看>>
C++之RAII惯用法
查看>>
opencv学习02-播放视频,注意没有声音
查看>>
top命令 -b -n5 -d10
查看>>
LAMP的部署
查看>>
IntelliJ Community 14 使用简要 2015-3-17
查看>>
Hadoop tutorial - - windows开发环境搭建 2015-3-20
查看>>
深入理解Magento – 第七章 – 自定义Magento系统配置
查看>>
Xcode常用快捷键
查看>>
Android的按钮单击事件及监听器的实现方式
查看>>
Ofbiz初探
查看>>