快速排序


快速排序采用“分而治之”的思想,把大的拆分为小的,小的再拆分为更小的。原理:
对于一组给定的记录,通过一趟排序后,将原序列分为两部分,其中前一部分的所有记录均比后一部分的所有记录小,然后再依次对前后两部分的记录进行快速排序,递归该过程。
步骤:

  • 分解。将输入的序列array[m...n]划分成两个非空子序列array[m..k]和array[k+1...n],使array[m...k]中任一元素的值不大于array[k+1...n]中任一元素的值。
  • 递归求解。通过递归调用快速排序算法分别对array[m...k]和array[k+1...n]进行排序。
  • 合并。由于对分解出的两个子序列的排序是就地进行的,所以在array[m...k]和array[k+1...n]都排好序后不需要执行任何计算array[m...n]就已排好序。
public static void sort(int []a, int low, int high){
    int i,j;
    int index;
    if(low >= high){
        return;
    }
    i = low;
    j = high;
    index = a[i]; //数组的第一个作为中轴基准数
    while(i < j){
        while(i < j && a[j] >= index){
            j--;
        }
        if(i<j){
            a[i++] = a[j]; //比中轴小的记录移到低端     
        }
        while(i < j && array[i] < index){
            i++;
        }
        if(i < j){
            a[j--] = a[i]; //比中轴大的记录移到高端     
        }
    }
    a[i] = index;
    sort(a,low,i-1);
    sort(a,i+1,high);
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,352评论 0 33
  • quicksort可以说是应用最广泛的排序算法之一,它的基本思想是分治法,选择一个pivot(中轴点),将小于pi...
    黎景阳阅读 3,297评论 0 1
  • 总结一下常见的排序算法。 排序分内排序和外排序。内排序:指在排序期间数据对象全部存放在内存的排序。外排序:指在排序...
    jiangliang阅读 5,235评论 0 1
  • 文/童心说电影 悬疑电影永远都是一个经久不衰的题材,在美国拍出了经典诸如《沉默的羔羊》、《十二宫》等。今天童心就给...
    童心说电影阅读 4,243评论 0 1
  • 实例方法 实例方法是属于某个特定类、结构体或者枚举类型实例的方法。实例方法提供访问和修改实例属性的方法或提供与实例...
    蛊毒_阅读 2,361评论 0 1