java快速排序实现

来源:互联网 发布:unity3d 路径动画 编辑:程序博客网 时间:2024/05/20 16:36

基本思想

选择一个基准元素,通常选择第一个元素或者最后一个元素,通过一趟扫描,

将待排序列分成两部分,一部分比基准元素小,一部分大于等于基准元素,此时基准元素在其

排好序后的正确位置,然后再用同样的方法递归地排序划分的两部分

步骤

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

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

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

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



图解



Java实现

public class QuickSort {public int getMiddle(int[] list, int low, int high) { int tmp = list[low]; // 数组的第一个作为中轴while (low < high) {     //当low >= high 递归结束while (low < high && list[high] >= tmp) {high--; //高位置减1}list[low] = list[high]; // 比中轴小的记录移到低端while (low < high && list[low] <= tmp) {low++;  //低位加1}list[high] = list[low]; // 比中轴大的记录移到高端}list[low] = tmp; // 中轴记录到尾return low; // 返回中轴的位置}public void _quickSort(int[] list, int low, int high) {  //递归if (low < high) {int middle = getMiddle(list, low, high); // 将list 数组进行一分_quickSort(list, low, middle - 1); // 对低字表进行递归排_quickSort(list, middle + 1, high); // 对高字表进行递归排}}public  void quick(int[] a2) {               if (a2.length > 0) {    //查看数组是否为空                    _quickSort(a2,0, a2.length - 1);    //程序入口开始递归            }      }}
JDK1.7 JAVA Arrays内部使用的是双轴快速排序  ,比较复杂。。一次利用两个数进行对比

0 0