快速排序

快速排序采用分治策略,选一个基准数,比基准数小的放在基准数的左边,比基准数大的放在右边,在对两部分数据进行快速排序,采用递归的方法直至数据全部变成有序的序列。

1.选择一个基准数据,一般为第一个数据,
2.设置变量i = left,j = right
3.从右向左比较数据是否大于基准数,是则j--,否则a[i]=a[j]
4.从左向右比较判断数据是否小于基准数,是则i++,否则a[j]=a[i]
5.循环3.4步骤,直到i=j,将基准数填如a[i]

public static int partion(int[] arr, int left, int right) {
    int temp = arr[left];
    int i = left;
    int j = right;
    while(i<j) {
        while(temp<arr[j]&&i<j) {
            j--;
        }
        if(i<j) {
            arr[i] = arr[j];
            i++;
        }
        while(temp>arr[i]&&i<j) {
            i++;
        }
        if(i<j) {
            arr[j] = arr[i];
            j--;
        }   
    }
    arr[i] = temp;
    return i;   
}
public static void quicksort(int[] arr, int left, int right) {
    if(left < right) {
        int mid = QuickSort.partion(arr, left, right);
        quicksort(arr,left,mid);
        quicksort(arr,mid+1,right);
    }
}   
public static void main(String[] args) {
    int[] arr = {62,23,51,46,85,42,15};
    QuickSort.quicksort(arr, 0, arr.length-1);
    System.out.println(Arrays.toString(arr));
}

快速排序最好情况
每次分区时都恰好分成刚好分为几近相等的两个子序列

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 原文地址 快速排序 原理 快速排序是C.R.A.Hoare提出的一种交换排序。它采用分治的策略,所以也称其为分治排...
    gyl_coder阅读 916评论 0 0
  • quicksort可以说是应用最广泛的排序算法之一,它的基本思想是分治法,选择一个pivot(中轴点),将小于pi...
    黎景阳阅读 471评论 0 1
  • 原文地址:快速排序优化详解 正如它的名字所体现,快速排序是在实践中最快的已知排序算法,平均运行时间为O(NlogN...
    守望先生阅读 510评论 0 0
  • 综述 通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记...
    _Cappuccino_阅读 12,759评论 1 3
  • 前言 快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想--...
    fjytqiu阅读 2,247评论 0 3