您当前的位置: 首页 >  Java

Kevin-Dev

暂无认证

  • 0浏览

    0关注

    544博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【Java -- 算法】十大排序算法之快速排序

Kevin-Dev 发布时间:2019-12-09 16:12:53 ,浏览量:0

在这里插入图片描述

本文介绍了排序算法的 Java 代码实现,所有代码均可通过 菜鸟工具在线编译器 直接运行,因此打算整理一下分享给大家。

简介

快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。

快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists)。

算法步骤

1. 从数列中挑出一个元素,称为 “基准”(pivot),

2. 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。

3. 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。

递归的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。虽然一直递归下去,但是这个算法总会退出,因为在每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去。 在这里插入图片描述

实例

1. Java 代码

import java.util.Random;
public class Main {
	public static void main(String[] args) {
        Random r = new Random();
        int[] data = new int[100];
        for (int i = 0; i  low) {
            //进行一次排序,将基准元放置在正确顺序的位置上,并确定当前基准元位置
            int key = getStandard(data, low, high);
            //分别将基准元左侧和基准元右侧当做一个序列从新进行排序,知道序列的长度为1
            sortCommon(data, low, key - 1);
            sortCommon(data, key + 1, high);
        }
    }

    public static int getStandard(int[] data, int low, int high) {
        //将基准元提取出来
        int tmp = data[low];
        while (low  data[high]) {
            swap(data, middle, high);
        }
        if (data[low] > data[high]) {
            swap(data, low, high);
        }
        if (data[middle] > data[low]) {
            swap(data, middle, low);
        }
    }

    public static void sortThreeInsert(int[] data, int low, int high) {
        if (high - low + 1             
关注
打赏
1658837700
查看更多评论
0.6993s