首页 > 其他分享 >快速排序与归并排序模版

快速排序与归并排序模版

时间:2023-11-21 10:23:53浏览次数:39  
标签:sort 归并 int 模版 arr mid merge 排序

快速排序

void quick_sort(int q[], int l, int r){
    
    if (l >= r) return;

    int i = l - 1, j = r + 1, x = q[l + (r - l >> 1)];
    while (i < j){
        do i ++ ; while (q[i] < x);
        do j -- ; while (q[j] > x);
        if (i < j) swap(q[i], q[j]);
    }
    quick_sort(q, l, j), quick_sort(q, j + 1, r);
}

归并排序

void merge_sort(int arr[], int l, int r){
    if(l==r)return;
    int mid = l+((r-l) >>1);
    merge_sort(arr,l,mid);
    merge_sort(arr,mid+1,r);
    merge(arr,l,mid,r);
}
void merge(int arr[] ,int l , int m, int r){
    int sortedArray[r-l+1];
    int lp = l, rp = m +1, i = 0;
    while(lp <= m && rp <= r)   sortedArray[i++] = arr[lp] < arr[rp]? arr[lp++] : arr[rp++];
    while(lp <= m)  sortedArray[i++] = arr[lp++];
    while(rp <= r)  sortedArray[i++] = arr[rp++];
    for (i = 0;i<r-l+1;i++) arr[l+i] = sortedArray[i];
}

标签:sort,归并,int,模版,arr,mid,merge,排序
From: https://www.cnblogs.com/yabushier/p/17845626.html

相关文章

  • 高精度模版
    高精度加法vector<int>add(vector<int>&A,vector<int>&B){//654321654321vector<int>C;inttemp=0;for(inti=0;i<A.size()||i<B.size();++i){if(i<A.size())temp+=A[i];......
  • 选择排序以及 TopN 问题
    选择排序选择排序是把最大或最小的元素放到最边上,然后不断重复以上过程。堆排序也是如此,只不过堆排序通过构建数据结构,让查找最大或最小元素并放到最边上的速度比选择排序快得多。选择排序实现voidSelectSort(std::vector<int>&data,intlen){if(len==0){......
  • 今天复习了一遍快速排序
    #include<iostream>usingnamespacestd;#include<stdio.h>constintN=10e6+10;intn;intq[N];voidquick_sort(intq[],intl,intr){if(l>=r)return;intx=q[l];inti=l-1;intj=r+1;while(i<......
  • 归并排序知识总结
    归并排序思维导图:知识点:如果原序列中两个数的值是相同的,它们在排完序后,它们的位置不发生变化,那么这个排序是稳定的。快速排序是不稳定的,归并排序是稳定的。快排变成稳定的=>使快排排序数组中的每个数都不同,将ai变成<ai,i>这个二元组,将ai的下标也放进来,使用双关键字排序。快速......
  • JAVA冒泡排序
    //冒泡排序publicclassDemo05{publicstaticvoidmain(String[]args){int[]arr={4,1,5,2,3};for(inti=0;i<arr.length-1;i++){//外循环:控制比较轮数(数组长度-1)i:0,1,2,3for(intj=0;j<arr.length-1......
  • 分治与归并
    归并算法:递归+合并,在递归的途中进行分治。递归会把区间越分越小,此时就可以进行分治操作。可以使用全局变量进行分治操作。可以在函数中进行分治操作,在递归树中实现pushup和pushdown,记性父节点与子节点的关系计算。  classSolution{public:structNode{......
  • List 函数排序操作,用对方法事半功倍!
    作为一名程序员,以下这些场景你肯定不陌生,1.数据分析和处理:在处理大量数据时,需要对数据进行排序以进行进一步的分析和处理。例如,在市场调研中,可能需要按照客户的购买频率对客户列表进行排序,以确定哪些客户最有可能购买产品或服务。2.报表生成:在生成报表时,往往需要按照特定的顺序对......
  • C++U3-第1课-基础排序(一)
    学习目标排序的概念  本阶段会学习的排序有 冒泡排序概念 第一轮比较,与交换 例题1:一趟交换 例题2:多躺比较,冒泡排序 【题意分析】进行n-1趟冒泡排序的过程,每一次输出当前一趟冒泡排序完的结果【思路分析】定义一个n,输入当前的n和储存n个数的数组for......
  • Java学习—计数排序
    计数排序的核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。1.计数排序的特征当输入的元素是n个0到k之间的整数时,它的运行时间是Θ(n+k)。计数排序不是比较排序,排序的速度快于任......
  • Dynamic CRM 组织服务对Word模版生成PDF文件
    目的:解决用户手动下载word模版再上传问题解决方案:组织服务直接对指定的word模版文件生成PDF文件流1.word模版必须上传到系统文档模版后:设置->模版->文档模版 2.组织调用“ExportpdfDocument”,返回PDF文件字节信息。另外实体信息需要把“注释”勾选上,否则执行代码会报错,如下:......