博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
快速排序(交换排序)
阅读量:5037 次
发布时间:2019-06-12

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

简介:

快速排序(Quicksort)是对的一种改进。

它的基本思想是:首先选择一个关键数据作为基准,通过一趟排序将要排序的数据分割成独立的两部分,其中左边的数据小于或等于基准,右边的数据大于或等于基准,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以进行,以此达到整个数据变成有序。

 

实现:

package suanfa;/* * 快速排序 */public class QuickSort {     public static void sort(int a[], int low, int hight) {        if (low > hight) {            return;        }        int i, j, key;        i = low;        j = hight;        key = a[i]; // 用第一个元素作为基准        while (i < j) { // 从表的两端交替向中间扫描            while (i < j && a[j] >= key) {                j--;            }            if (i < j) {                a[i] = a[j];                i++;            }            while (i < j && a[i] < key) {                i++;            }                            if (i < j) {                      a[j] = a[i];               j--;            }                 }                a[i] = key;//将基准数值替换回 a[i]                          sort(a, low, i - 1); //递归调用,把key前面的完成排序               sort(a, i + 1, hight); //递归调用,把key后面的完成排序           }     public static void print(int src[]) {         for (int i = 0; i < src.length; i++) {                         System.out.print(src[i] + " ");            }         System.out.println();    }         public static void main(String[] args) {        int a[] = {6,2,7,3,8,9};        print(a);        sort(a, 0, a.length - 1);        print(a);     }}

 

分析:

在快速排序算法中,比较关键的一个部分是主元的选择。

在最差情况下,划分由n个元素构成的数组需要进行n次比较和n次移动,因此划分需要的时间是O(n)。在最差情况下,每次主元会将数组划分为一个大的子数组和一个空数组,这个大的子数组的规模是在上次划分的子数组的规模上减1,这样在最差情况下算法需要(n-1)+(n-2)+...+1= O(n^2) 时间。

最佳情况下,每次主元将数组划分为规模大致相等的两部分,时间复杂度为 O(nlogn)

转载于:https://www.cnblogs.com/liuzhenping/p/7553818.html

你可能感兴趣的文章
svn
查看>>
父组件操作子组件中的值,将父组件的值设置给子组件
查看>>
配置SQL Server 2005 以允许远程连接
查看>>
LSTM学习理解资料
查看>>
Callable与Runable接口 submit与execute区别
查看>>
Obsidium V1.3.0.4 脱壳
查看>>
Linux make语法
查看>>
用户体验之认知地图、思维导图和概念图
查看>>
bzoj3389 [Usaco2004 Dec]Cleaning Shifts安排值班
查看>>
bzoj3173 [Tjoi2013]最长上升子序列
查看>>
第八周作业
查看>>
spring事务隔离级别
查看>>
JavaEE:Eclipse开发工具的相关使用和XML技术
查看>>
LR_问题_如何将场景中的用户设置为百分比形式
查看>>
OpenShift-OKD3.10基础环境部署
查看>>
工程师淘金:开发Android主攻四大方向
查看>>
ASP.NET MVC——Controller的激活
查看>>
javascript中Array对象
查看>>
SQLSERVER中查看谁占用了Buffer Pool
查看>>
lamp环境安装shell脚本
查看>>