算法解析之快速排序

快速排序

算法思路:
1、找到一个关键值(一般是第一个或者中值),将小于关键值的序列放在左边,大于关键值的序列放在右边
2、将左右两个序列分别使用1过程(递推过程)
3、最终各个序列退化至单个元素,递归开始回归,整个序列有序

C++

//核心代码
template <typename T>
//给关键值找到合适的位置,并返回所在的位置
int partition(T arr[],int low,int high){
    //选取第一个值作为关键值(中轴值)
    int keyValue = arr[low];
    //j为最终的中轴索引值
    int j = low;
    for (int i = low + 1; i <= high; i++) {
        if(arr[i] < keyValue){
            swap(&arr[++j], &arr[i]);
        }
    }
    swap(&arr[low], &arr[j]);
    return j;
}

template <typename T>
void quickSort(T arr[],int low,int high){
    //回归条件
    if (high>low) {
        //1步骤
        int q = partition(arr, low,high);
        //2步骤
        quickSort(arr, low, q-1);
        quickSort(arr, q+1, high);
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    蚁前阅读 5,220评论 0 52
  • 概述:排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    每天刷两次牙阅读 3,744评论 0 15
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,948评论 18 139
  • 1 序 2016年6月25日夜,帝都,天下着大雨,拖着行李箱和同学在校门口照了最后一张合照,搬离寝室打车去了提前租...
    RichardJieChen阅读 5,165评论 0 12
  • 1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 将一个记录插入到已排序好...
    依依玖玥阅读 1,282评论 0 2