闲来重写一下快速排序

还是写一下原理吧:

有图为证:

下图为原理示意图

package Alrithm;

public class Quick {
    public static void sort(int[] arr, int low, int high) {
        int min = low;// 用于动态移动角标
        int max = high;// 用于动态移动角标
        if (low < high) {// 元素大于一个才进行排序
            int temp = arr[low];// 定义基数
            while (min < max) {// 在角标重合时跳出循环
                // 新从最大值开始
                while (min < max && arr[max] > temp) {// 右边的数大于基数时,max--
                    max--;
                }
                // 减完之后在换位置
                int tmp = arr[min];
                arr[min] = arr[max];
                arr[max] = tmp;
                // 再从最小值开始
                while (min < max && arr[min] < temp) {
                    min++;
                }
                int tmp1 = arr[min];
                arr[min] = arr[max];
                arr[max] = tmp1;
            }
            sort(arr, low, min - 1);
            sort(arr, min + 1, high);
        }
    }

    public static void main(String[] args) {
        int[] arr = { 21, 32, 122, 433, 2322222, 56, 121, 565, 123 };
        sort(arr, 0, arr.length - 1);
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + ",");
        }

    }
}
时间: 2024-07-31 14:33:34

闲来重写一下快速排序的相关文章

AWK文本处理增强shell功能--AWK完全手册

AWK是一种优良的文本处理工具.它不仅是 Linux 中也是任何环境中现有的功能最强大的数据处理引擎之一. 本文主要摘录池中龙写的Unixawk使用手册(第二版),对其中内容稍微改动.感谢作者的分享. 目 录 1 0作者的话 2 1awk的调用方式 3 2awk的语法 4 3awk的记录.字段与内置变量 5 4awk的内置函数 5 5在命令行使用awk 6 6awk的变量 7 7运算与判断 7 8awk的流程控制 8 8.1BEGIN和END: 8 8.2流程控制语句 9 8.2.1if...e

Unix awk使用手册

Unix awk使用手册(第二版) 池中龙 作者的话: <UNIX AWK使用手册>是我几个月前的作品了,回过头来看,这篇文章实在是很粗燥,因当时我写作并上传这个作品时实在是太忙了,没有对文章的质量进行很好的检查,心里老觉得有愧于网友的厚爱,于是趁闲赶忙重写一遍,虽然不一定会有很大的改观,但质量是肯定要好一点的,唯如此,我的良心上才好受一点,呶,下面就是我的修改稿,各位老友请与第一版相比一下,看是否有所进步! 这次改写仍然保留了原有的风格:正文由浅入深,文后附上了大量的相关资料,这样做的原因是

AWK增强的文本处理shell特征--AWK完全手册

AWK这是一个很好的文字处理工具. 它不仅 Linux 中也是不论什么环境中现有的功能最强大的数据处理引擎之中的一个. 本文主要摘录池中龙写的Unixawk使用手冊(第二版),对当中内容略微修改.感谢作者的分享. 目 录 1 0作者的话 2 1awk的调用方式 3 2awk的语法 4 3awk的记录.字段与内置变量 5 4awk的内置函数 5 5在命令行使用awk 6 6awk的变量 7 7运算与推断 7 8awk的流程控制 8 8.1BEGIN和END: 8 8.2流程控制语句 9 8.2.1

白话排序算法--快速排序

前言: 写到快速排序时,之前已经进行了冒泡.选择.插入排序,发现算法问题很多东西都是和实际问题相逆的,实际你可能会由外及里,由上及下,可是算法里面它有时就需要你由里往外去扩散,好比最里面的是小成果,然后一次次往外变化,成果也慢慢变大,最后直至达到最终成果为止.本篇快速排序方法因为调用了递归,你就可以逆着由里及外来思考问题. 写这篇文章光画图就花费了我2小时时间,越抽象就越不好形容和比喻,画的不好,希望各位不要吐槽. 快速排序:先快速排序将队列一分为二,然后对每个队列进行递归调用快速排序方法,直至

一个高仿闲鱼键自定义数字键盘特效

博客地址: http://www.jianshu.com/p/be68facfc4b8 仿造android端闲鱼发布选择价格数字键盘,自定义数字键盘 public class MyKeyBoardView extends KeyboardView { private Context mContext; private Keyboard mKeyBoard; public MyKeyBoardView(Context context, AttributeSet attrs) { super(con

下午闲来没事儿,把几种常见的排序都码了一遍

Source code /* 内部排序相关代码总结 */ #include<windows.h> #include<vector> #include<algorithm> #include<iostream> #include<fstream> #include<math.h> #include<time.h> #define N 10000 //待排序的数据规模 static unsigned int T = 17; u

大四重写大一的C语言大作业是一种怎样的体验

序言 在整理文件时偶然发现大一时的C语言大作业,故突然心血来潮想看看曾经花费一个星期的成果. 它虽然只有一个文件,却足足有829行,可见当时我下了多大功夫.回忆起当时作业的要求,大致也不过是实现一个可以增删改记录的学生成绩管理系统,何至于要写829行呢?找到源码配备的文档,想起那些我绞尽脑汁想出来的诸多花哨的功能,我不禁感慨:年轻就是能折腾啊! 而在我准备仔细拜读时,我却高兴不起来了--我根本看不懂也不想看懂我的代码!尽管我读过很多很烂的代码,但当发现自己曾经的骄傲之作其实是一片垃圾不堪入目时,

快速排序

快速排序的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列. 快速排序是一种不稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动 快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序.它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod). 该方法的基本思想是:

快速排序——Python

快速排序: 在一组数据中选择一个基准值,让后将数据分为两个部分,一部分大于基准,一部分小于基准,然后按此方法将两个部分分组,直到不能再分为止. 需要明白一个概念递归和分而治之的概念. Python实现: 1 # 快速排序 2 3 import random 4 5 def quick_sort(arr): 6 # 边界条件 7 if len(arr) < 2: 8 return arr 9 key = random.choice(arr) # 选择基准 10 left = [i for i in