一步一步搞清排序之快速排序(JAVA)

来源:互联网 发布:淘宝售后服务怎么做 编辑:程序博客网 时间:2024/05/18 06:26

前言:快速排序应该是最经典的排序之一了,无论是学生时代的考试还是找工作时的面试,总会有快速排序的身影。虽然原理简单,但很有必要落到实处实现它。

原理:(以非降序为例)快速排序最基本的思想就是以选中的基准数为基础,将比该元素大的元素统一放在该元素的右边,比其小的放在其左边。这样一轮结束后,该基准元素的位置就确定了。接下来就分别递归处理左右部分的数据。

步骤:
1:选取基准数(这个可以随机选,本例选第一个元素)
2:选取定位元素 i 、j,i 表示从最左边开始的索引值,j表示从最右边开始的索引值。
3:i 开始向前寻找,遇到比基准数大的值时停下。
4:j 开始向后寻找,遇到比基准数小的值时停下。
5:若 i< j,则交换 i 、j 的元素值。
6:重复 3、4、5步骤,当 i>=j 时,搜索完毕,交换 j 与基准元素的值。
7:递归处理左右部分,直到子序列元素只剩下一个时,排序完成。

代码如下:

package com.zi.quick;import java.util.Arrays;import java.util.Scanner;public class Quick {    public void swap(int[] a,int i,int j){        int temp = a[i];        a[i] = a[j];        a[j] = temp;    }    public void quick_sort(int[] a,int low ,int high){        if(low<high)        {            int i = low;            int j = high + 1;            int pivot = a[i];            while(true)            {                while(i<high&&a[++i]<=pivot);                while(j>low&&a[--j]>=pivot);                    if(i<j)                    {                        swap(a, i, j);                    }                    else                    {                        break;                    }            }            swap(a, low, j);            quick_sort(a, low, j-1);            quick_sort(a, j+1, high);        }    }    public static void main(String[] args) {        Quick quick = new Quick();        Scanner scanner = new Scanner(System.in);        int[] a = new int[10];        for(int n = 0; n<10;n++)        {            a[n] = scanner.nextInt();        }        quick.quick_sort(a, 0, 9);        System.out.println(Arrays.toString(a));    }}
0 0